Thread View: pl.comp.os.linux.programowanie
4 messages
4 total messages
Started by Marcin Laszewski
Tue, 27 Dec 2011 19:31
Wielowatki - jak to jest zrobione?
Author: Marcin Laszewski
Date: Tue, 27 Dec 2011 19:31
Date: Tue, 27 Dec 2011 19:31
19 lines
1613 bytes
1613 bytes
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? Pewne elementy wieloatkowosci mozna zrobic w oparciu o setjmp/longjmp. Jak yo sie ma to pthreads? Nijak, czy moze watki to wykorzystuja? 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. No, poza standardowa informacja, ze 'procesy w unix-ach' sa z definicji 'lekkie', wiec watki nie sa takie popularne. -- ml http://www.archimedes.eu.org/
Re: Wielowatki - jak to jest zrobione?
Author: Wojciech Jaczewski
Date: Tue, 27 Dec 2011 20:50
Date: Tue, 27 Dec 2011 20:50
13 lines
1242 bytes
1242 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? Jest wsparcie w jądrze. > Gdzie mozna sobie poczytac o zaletach i wadach programowania > wielowatkowego pod Linux-em? Odrobinę o wadach: http://catb.org/~esr/writings/taoup/html/ch07s03.html#id2923889
Re: Wielowatki - jak to jest zrobione?
Author: Adam Osuchowski
Date: Fri, 30 Dec 2011 23:57
Date: Fri, 30 Dec 2011 23:57
54 lines
4053 bytes
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.
Re: Wielowatki - jak to jest zrobione?
Author: orcus
Date: Sat, 31 Dec 2011 10:15
Date: Sat, 31 Dec 2011 10:15
31 lines
2671 bytes
2671 bytes
On 30.12.2011, Adam Osuchowski <someone@somewhere.com> wrote: > 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. W tym monecie dyskusji warto IMO wspomnieć o czymś takim jak userspacowe procesy. Implementacja którą znam to maszyna wirtualna erlang-a. Tworzy się to niesamowicie szybko. Procesy sobie nawzajem kuku nie zrobią. Niestety już sama maszyna wirtualna powoduje spory narzut na wydajność. Nie mniej jednak czasem jeśli budujemy system rozproszony ilość gratisów tego typu które dostajemy od języka przyćmiewa kwestie wydajności. Poza rozproszonymi systemami erlang ma niewiele zastosowań. -- Pozdrawiam orcus
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads