Czy biblioteka Pthread jest rzeczywiście rozwiązaniem wątku użytkownika?

Tytuł może nie być wystarczająco jasny, ponieważ Nie wiem, jak właściwie zdefiniować moje pytania.

Rozumiem, że pthread jest biblioteką wątków spełniającą standard POSIX (o POSIX, patrz wikipedia: http://en.wikipedia.org/wiki/Posix ). jest on dostępny w systemach uniksopodobnych.

Co do wątku, czytałem, że są trzy różne modele:

Wątek na poziomie użytkownika: jądro o tym nie wie. Użytkownik sam tworzy/wdraża / niszczy nici.

Wątek na poziomie jądra: jądro bezpośrednio obsługuje wiele wątków sterowania w procesie.

Proces Light weight (LWP): zaplanowany przez jądro, ale może być ograniczony wątkami użytkownika.

Widziałeś moje zamieszanie? Kiedy wywołuję pthread_create(), aby utworzyć wątek, czy utworzyłem wątek na poziomie użytkownika? Chyba tak. Mogę więc powiedzieć, że Pthread oferuje rozwiązanie na poziomie użytkownika dla wątków? Nie może manipulować kernel / LWP?
Author: vatsa, 2011-12-27

5 answers

Q: rozumiem, że pthread jest biblioteką wątków spełniającą standard POSIX

O: Tak. Właściwie, "Pthreads" oznacza " Posix threads": http://en.wikipedia.org/wiki/Pthreads

Q: Jest on dostępny w systemach uniksopodobnych.

O: W rzeczywistości jest on dostępny dla wielu różnych systemów operacyjnych ... w tym Windows, MacOS ... i oczywiście Linux, BSD i Solaris.

P: co do wątku, czytałem, że są trzy różne modele

Teraz robisz się niewyraźny. "Wątki" to bardzo ogólne określenie. Istnieje wiele, wiele różnych modeli. I wiele, wiele różnych sposobów można scharakteryzować i / lub zaimplementować "wątki". W tym takie rzeczy jak Java threading model lub ada threading model.

Q: kiedy wywołuję pthread_create (), aby utworzyć wątek, czy utworzyłem wątek na poziomie użytkownika?

O: tak: prawie wszystko, co robisz w przestrzeni użytkownika, jest "chronione" w twoim własnym, prywatnym " użytkowniku przestrzeń".

Q: wątek na poziomie użytkownika: jądro o tym nie wie.

O: Nie. Jądro wie wszystko :)

Q: wątek na poziomie jądra: jądro bezpośrednio obsługuje wiele wątków kontrola w procesie.

A: tak, istnieje coś takiego jak "wątki jądra".

I tak się składa, że Linux szeroko wykorzystuje wątki jądra. Na przykład, każdy pojedynczy proces w systemie Linux jest "wątkiem jądra". I każdy stworzony przez użytkownika pthread jest również zaimplementowany jako nowy "wątek jądra". Podobnie jak "wątki robocze" (które są całkowicie niewidoczne dla każdego procesu na poziomie użytkownika).

Ale jest to zaawansowany temat, którego nie musisz rozumieć, aby efektywnie korzystać z pthreads. Oto świetna książka, która omówiła ten-i wiele innych tematów - szczegółowo: {]}

Rozwój Jądra Linuksa, Robert Love

Pamiętaj:" Pthreads " jest interfejsem. Sposób wdrożenia zależy od platformy. Linux używa wątków jądra; Windows używa wątków Win32 itd.

 21
Author: paulsm4,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-26 21:35:31

@paulsm4 mam wątpliwości co do Twojego komentarza, że kernel wie wszystko. W tym szczególnym kontekście wątków na poziomie użytkownika, jądro nie jest świadome faktu, że coś takiego się dzieje. Harmonogram wątku na poziomie użytkownika jest utrzymywany przez samego Użytkownika (za pośrednictwem interfejsu dostarczonego przez bibliotekę), a jądro kończy przydzielając tylko jeden wątek jądra do całego procesu. Kernel traktowałby proces jako pojedynczy wątek i każde blokowanie wywołania przez jeden z wątków kończyłoby się blokowanie wszystkich wątków tego procesu. Zobacz http://www.personal.kent.edu / ~rmuhamma/OpSystems/Myos/threads.htm

 29
Author: pareshverma91,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-28 23:45:33

Pthreads samo w sobie nie jest biblioteką wątków. pthreads jest interfejsem implementowanym przez określoną bibliotekę wątków, wykorzystującą zasoby współbieżności dostępne na tej platformie. Jest więc implementacja pthreads na Linuksie, bsd, Solarisie itp. i o ile interfejs (pliki nagłówkowe i znaczenie wywołań) jest taki sam, to implementacja każdego z nich jest inna.

Więc to, co pthread_create faktycznie robi, jeśli chodzi o obiekty wątku jądra, różni się między systemami oraz implementacje biblioteki pthread. Przy pierwszym przybliżeniu nie musisz wiedzieć (to rzeczy, o których abstrakcja pthread pozwala Ci nie wiedzieć). W końcu możesz potrzebować zobaczyć "za kurtyną", ale dla większości użytkowników pthread nie jest to konieczne.

Jeśli chcesz wiedzieć, co robi implementacja / specific / pthread, na konkretnym systemie operacyjnym, musisz wyjaśnić swoje pytanie. To, co robią na przykład Solaris i Linux, jest zupełnie inne.

 10
Author: FIn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-26 21:30:26

W Linuksie pthread jest zaimplementowany jako lekki proces. Jądro (v2.6+) jest zaimplementowane z NPTL . Pozwolę sobie zacytować treść wiki:

Nptl jest tak zwaną biblioteką wątków 1×1, w której wątki tworzone przez Użytkownika (za pośrednictwem funkcji biblioteki pthread_create ()) są w 1-1 korespondencji z obiektami schedulable w jądrze (zadania, w przypadku Linuksa). Jest to najprostsza możliwa implementacja wątków.

Więc pthread w Linuksie jądro jest zaimplementowane jako wątek jądra.

 4
Author: Junji Zhi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:09

Pthreads to po prostu ustandaryzowany interfejs dla bibliotek wątkowych. To, czy zostanie utworzony wątek OS, czy wątek lekki, zależy od używanej biblioteki. Niemniej jednak, moim pierwszym gościem byłoby to, że twoje wątki są "prawdziwymi" wątkami na poziomie OS.

 0
Author: Eser Aygün,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-26 21:28:03