Wątek (ang. thread) określany również jako proces lekki (ang. lightweight process - LWP) to podstawowa jednostka wykorzystania procesora [1]. W skład wątku wchodzą:

Wątek współużytkuje z innymi równorzędnymi wątkami sekcję kodu i danych oraz takie zasoby systemu operacyjnego jak otwarte pliki i sygnały, co łącznie nazywane jest zadaniem (ang. task) [1].

Aby zrozumieć pojęcie wątku najlepiej porównać go z procesem tradycyjnym, tzw. ciężkim (ang. heavyweight). Proces = zadanie z jednym wątkiem. Takie właśnie równanie opisuje zależność pomiędzy procesem a wątkiem.

Wątki, w przeciwieństwie do procesów, można przełączać tanim kosztem, tj. z małym użyciem czasu procesora. Oczywiście przełączenie wątku również wymaga od systemu operacyjnego przełączenia zbioru rejestrów, jednakże nie jest konieczne zarządzanie pamięcią.

Porównując wątki i procesy, rozważymy sposób sterowania wieloma wątkami i wieloma procesami. Każdy z procesów działa niezależnie, posiada własny licznik rozkazów, wskaźnik stosu oraz przestrzeń adresową. W przypadku, gdy zadania wykonywane przez procesy nie są ze sobą powiązane wszystko jest w porządku, jednakże gdy mamy do czynienia z jednym zadaniem wykonywanym przez kilka procesów marnowane są zasoby systemu (każdy proces przechowuje osobne kopie tych samych informacji). Proces wielowątkowy natomiast, wykonujący jedno zadanie, zużywa mniej zasobów (wątki korzystają z tego samego zbioru informacji).

Wątki są podobne do procesów pod wieloma względami. Tak jak procesy, watki mogą znajdować się w jednym z określonych stanów: gotowości, zablokowania, aktywności i zakończenia. Aktywny może być tylko jeden wątek (tak jak proces). Każdy wątek ma własny licznik rozkazów i stos, a jego wykonanie w procesie przebiega sekwencyjnie. Wątki, również podobnie jak procesy, mogą tworzyć wątki potomne i mogą blokować się do czasu zakończenia wywołań systemowych - możliwa jest więc sytuacja działania jednego wątku, gdy zablokowany jest inny. Różnicą pomiędzy wątkiem a procesem jest fakt, że wątki są zależne od siebie. Każdy z wątków ma dostęp do danych innego z wątków (dostęp do każdego adresu w zadaniu). Niemożliwa jest więc ochrona na poziomie wątków. Ponieważ jednak w obrębie jednego zadania wątki mogą należeć do jednego użytkownika, ochrona taka nie jest konieczna.

Różne systemy operacyjne w różny sposób traktują wątki. Popularne są dwie koncepcje:

Wątki tworzone na poziomie użytkownika, ponieważ nie wymagają dostępu do jądra (korzysta się z nich za pomocą wywołań bibliotecznych zamiast odwołań do systemu), mogą być szybciej przełączane. Może jednak zdarzyć się sytuacja, w której po dowolnym wywołaniu systemowym cały proces musi czekać (nie jest więc realizowany), gdyż jądro planuje tylko procesy (nie wie o istnieniu wątków). Dlatego też, coraz częściej w systemach operacyjnych, stosuje się kombinację tych dwóch rozwiązań, realizując wątki w jądrze i z poziomu użytkownika.

NASTĘPNA