Troszkę o wątkach

W tym wpisie opiszę w mojej subiektywnej opinii najważniejsze informacje odnośnie wątków i tematów z nimi związanymi.

Wątek to taki mały proces…

Często o wątkach mówi się, że są to takie małe procesy. Ale czy na pewno? Zacznijmy od tego czym jest proces.

Proces – to odseparowany od innych procesów działający program:

Wątek – to coś co działa w ramach procesu i możliwe jest działanie wielu wątków w ramach jednego procesu. Wątki współdzielą zasoby:

Proces versus wątek

Proces -> odseparowany od innych procesów – zasoby nie są współdzielone pomiędzy procesami.

Wątek -> działa w ramach jednego procesu – wszystkie wątki współdzielą zasoby procesu.

Zarządzanie procesami

Jeśli chodzi o zarządzanie procesami, to sprawa jest dosyć prosta – zarządzaniem zajmuje się system operacyjny (za pomocą planisty – scheduler).

Zarządzanie wątkami

Zarządzanie wątkami jest nieco bardziej złożone. Może ono być realizowane za pomocą wsparcia systemu operacyjnego lub też programowo. Są też inne opcje, które tutaj celowo zostały pominięte.

Zarządzanie wątkami za pomocą systemu operacyjnego

Systemy operacyjne potrafią zarządzać wątkami i wiele języków wykorzystuje właśnie ten natywny mechanizm dla wątków.

PlusyMinusy
Natywne zarządzanie potrzebami procesu – jeśli mamy dużo wątków w jednym procesie, to system automatycznie doda więcej czasu procesoraWolne
Zużywają sporo zasobów
Języki wspierające
  • Java
  • C++
  • Python
  • Kotlin

Programowe zarządzanie wątkami

Zamiast polegać na systemie operacyjnym, można napisać swoją biblioteczkę do obsługi wątków – na tym właściwie polega programowe zarządzanie wątkami.

PlusyMinusy
SzybkieBrak natywnego zarządzania potrzebami procesu – jeśli mamy dużo wątków w jednym procesie, to system nie doda nam czasu procesora
Nie potrzebują tylu zasobów
Języki posiadające biblioteki

Typy wątków

Często można usłyszeć, że jakiś wątek jest typu daemon lub worker. Ale co to znaczy?

Wątek użytkownika (w .NET foreground thread)

Tego typu wątki wykonują rzeczywistą pracę jaka jest do wykonania przez aplikację – na przykład obsługa żądań do serwera.

Wątek typu daemon (w .NET background thread)

To taki wątek który sam zakończy pracę automatycznie po zakończeniu pracy przez wszystkie wątki użytkownika.

Wątek main

Jeśli aplikacja ma jeden punkt startu (jak na przykład w Javie) to wątek startujący aplikację będzie określony typem main.

Wątek typu worker

Jeśli mamy do czynienia z executorem wątków, to wszystkie dostępne dla niego watki będą wątkami typu worker.

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *