🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.os.linux.programowanie
Article #72405

Re: Wielowatki - jak to jest zrobione?

#72405
From: Adam Osuchowski
Date: Fri, 30 Dec 2011 23:57
54 lines
4053 bytes
Marcin Laszewski wrote:
> Czy ktos moze wie jak sa zrealizowane wewnetrznie watki w procesach Linux-a?
> Czy jest to zrobione tylko przez glibc czy tez musialo byc dodane jakies
> wsparcie w jadrze?

To zależy o jakich wątkach mówisz. Są wątki kernelspace'owe, userspace'owe
(nazywane czasami włóknami z ang. fibers) i mieszane. Najpopularniejsza
obecnie linuksowa implementacja wątków to NPTL, o którą Ci zapewne chodzi,
zaimplementowana jest w jądrze, głównie w postaci syscalla clone() i paru
innych funkcjonalności dotyczących synchronizacji zasobów i obsługi
sygnałów. Do tego dochodzi jeszcze userspace'owa biblioteka libpthreads
umożliwiająca łatwiejsze i jednolite zarządzanie wątkami, ale ściśle
rzecz biorąc nie jest konieczna bo można mieć wątki wołając bezpośrednio
syscalle.
 
> Pewne elementy wieloatkowosci mozna zrobic w oparciu o setjmp/longjmp. Jak
> yo sie ma to pthreads? Nijak, czy moze watki to wykorzystuja?

Pthreads to jest tylko i wyłącznie ustandaryzowane API i semantyka wątków.
Chodzi o to, żeby programy wykorzystujące wątki były przenośne pomiędzy
różnymi uniksami zgodnymi z POSIX. Jest wiele różnych implementacji
pthreads. Na Linuksie obecnie dominuje wspomniany już przeze mnie NPTL.

> Gdzie mozna sobie poczytac o zaletach i wadach programowania wielowatkowego
> pod Linux-em? Czytalem juz w gogolach - generalnie to sa tam glownie strony
> man-a (w roznych wersjach jezykowacyh), przezentacja typu 'wprowadzenie do
> watkow', ale brak jakis fajnych opracowan porowanania praktycznego apliakcji
> robiacych to samo w watkach i roznych procesach.

O wadach, np. http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.pdf
O zaletach można zgooglać wiele informacji, chociaż główną z nich jest
oczywiście minimalny czas tworzenia/niszczenia wątku i współdzielenie
zasobów.

> No, poza standardowa informacja, ze 'procesy w unix-ach' sa z definicji
> 'lekkie', wiec watki nie sa takie popularne.

Co znaczy ,,lekkie''? Tworzenie procesu przez fork() zawsze będzie trwało
zdecydowanie dłużej od stworzenia wątku przez pthread_create(). Pomagają
tu trochę czary optymalizacyjne w postaci vfork(), CoW czy wstrzymywanie
parenta dopóki potomek nie zawoła execve() ale zawsze wątki się szybciej
tworzy niż osobne procesy bo nie trzeba robić tylu rzeczy co przy forku 
i na tym polega ich siła. A to, że w jądrze w zasadzie nie ma podziału
na procesy i wątki to jest już kwestią tej konkretnej implementacji.

Co do popularności wątków, to się nie zgodzę. Wątki są wykorzystywane
w aplikacjach, które wymagają częstego tworzenia/niszczenia równoległych
instancji i po prostu osobne procesy zabijały by wydajność. Myślę, że 
jeśli już, to powodem ew. braku popularności wątków jest większa
komplikacja kodu (chociaż biblioteki to upraszczają) i wymóg większej
dyscypliny programistycznej (żeby sobie wątki nawzajem nie zrobiły kuku).
To powoduje, że np. programiści bibliotek nie chcą tworzyć ich w wersji
thread-safe, a to z kolei powoduje, że inne biblioteki i aplikacje, które
taką bibliotekę wykorzystują, też muszą być jednowątkowe i problem narasta.
Technical Details
Message-ID: <20111230235700.6b8b4567@polsl.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!polsl.pl!not-for-mail
References: <4efa1cfe$0$1223$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!polsl.pl!not-for-mail
From: Adam Osuchowski <someone@somewhere.com>
Newsgroups: pl.comp.os.linux.programowanie
Subject: Re: Wielowatki - jak to jest zrobione?
Date: Fri, 30 Dec 2011 23:57:03 +0000 (UTC)
Organization: Politechnika Slaska, Gliwice
Lines: 54
Message-ID: <20111230235700.6b8b4567@polsl.pl>
References: <4efa1cfe$0$1223$65785112@news.neostrada.pl>
NNTP-Posting-Host: hydra.ck.polsl.pl
Mime-Version: 1.0
X-Trace: polsl.pl 1325289423 19849 2a01:1d8:1:1::11 (30 Dec 2011 23:57:03 GMT)
X-Complaints-To: news@polsl.pl
NNTP-Posting-Date: Fri, 30 Dec 2011 23:57:03 +0000 (UTC)
In-Reply-To: <4efa1cfe$0$1223$65785112@news.neostrada.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit