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.
| Plusy | Minusy |
|---|---|
| Natywne zarządzanie potrzebami procesu – jeśli mamy dużo wątków w jednym procesie, to system automatycznie doda więcej czasu procesora | Wolne |
| 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.
| Plusy | Minusy |
|---|---|
| Szybkie | Brak 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
- Java -> https://docs.paralleluniverse.co/quasar/
- C++ -> https://www.boost.org/doc/libs/1_81_0/libs/fiber/doc/html/fiber/overview.html
- Python -> https://docs.python.org/3/library/asyncio.html
- Kotlin -> https://github.com/Kotlin/kotlinx.coroutines
- …
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.
