[C][linux] procesy i wątki

0

Witam, chciałem napisać bardzo prosty server pod linuxa.
Niestety mam do dyspozycji jedynie konto shellowe i gcc,
które są mi bardzo obce...
Chciałbym tak na początek żeby server odebrany tekst od
klienta odpisywał do wszystkich pozostałych, no i teraz
mam pytania:

Czy korzystać z procesów czy z wątków ?

Czy po wykonaniu kopii procesu przy pomocy fork() jest
jakiś dostęp z procesu potomnego do pamięci procesu macierzystego ?
(konkretnie to do tablicy deskryptorów gniazd)

Próbowałem też z wątkami, wklepałem przykładowy ostatni kod
ze strony http://linux.gery.pl/dzialy/programowanie/wstep/process
no i otrzymałem następujące komunikaty:

[email protected]:~/cpp$ gcc thread_test.c
/tmp/ccive5b2.o(.text+0xca): In function `main':
: undefined reference to `pthread_create'
/tmp/ccive5b2.o(.text+0x105): In function `main':
: undefined reference to `pthread_join'
collect2: ld returned 1 exit status

Czy to znaczy że mam nie właściwe biblioteki stary kompilator,
czy na tej stronie zły kod podali ?

0

W regulaminie forum jest coś o tym żeby podać odpowiedź, jeśli
znajdzie się ją samemu, więc podaję....

ad1: lepsze są procesy bo z wątkami dużo kłopotów...

ad2: z fork() się nie da, ale można skorzystać z clone()...

ad3: wystarczy dodać parametr -lpthread przy kompilacji w gcc...

Odpowiedzi udzielił mi: Gynvael Coldwind

0

ad1. Procesy latwiejsze - czy ja wiem, raczej nie. Za to wiem ze watki - znacznie szybciej przelaczane (przelaczanie miedzy procesami to duzo bardziej skomplikowana i czasochlonna operacja), znacznie szybsze do stworzenia - wszystko w konkescie wydajnosci i pracy jaka bedzie musial wykonac kernel.
W twoim wypadku na pewno trzeba zastosowac watki a nie procesy, ze wzgledu chociazby na zasoby jakie takowy serwer by zzeral - a poniewaz to nie ty rzadzisz na danym serwerze wiec prawdopodobnie masz ograniczenia na ilosc procesow i watkow ktore mozesz odpalic.

PS. Co by to bylo gdyby Apache sie forkowal albo clonowal ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1