Loading AI tools
Z Wikipedii, wolnej encyklopedii
Green thread (ang. zielony wątek) − wątek, który jest tworzony i obsługiwany przez maszynę wirtualną, w odróżnieniu od wątków natywnych danego systemu operacyjnego. Zielone wątki emulują środowisko wielowątkowe niezależnie od możliwości systemu, na którym zostały uruchomione. Są zarządzane w przestrzeni użytkownika, a nie jądra systemu, przez co mają możliwość pracy w środowiskach, które nie wspierają wątków[1].
Na wielordzeniowych procesorach, natywne implementacje wątków pozwalają na automatyczne podzielenie pracy na poszczególne procesory, na co zwyczajowo nie zezwalają implementacje zielonych wątków[1] [2]. Na niektórych maszynach wirtualnych zielone wątki mogą być uruchamiane szybciej niż odbywa się to dla natywnych wątków systemu operacyjnego. Na jednoprocesorowych komputerach najbardziej wydajny model nie został jeszcze jasno określony, benchmarki na komputerach z zainstalowanym jądrem linuksowym pokazują, że:[3]
Dodatkowo, zielony wątek może blokować wszystkie inne wątki, jeśli dokonuje blokującej operacji I/O. Aby zapobiec temu problemowi, zielone wątki muszą używać asynchronicznych operacji I/O, co komplikuje ich implementację, oraz zwiększa ich czas reakcji.
Stworzone w przestrzeni użytkownika zielone wątki są lżejsze od natywnych, ale jako że implementują formę wielozadaniowości, błędy implementacyjne w programach używających wątków mogą powodować nieoczekiwane zakończenie działania.
W Javie 1.1, zielone wątki były jedynymi dostępnymi[4], przynajmniej na systemie Solaris. Ponieważ zielone wątki posiadają pewne ograniczenia w stosunku do natywnych, w następnych wersjach Javy ustąpiły im miejsca.
Wyjątkiem jest wirtualna maszyna Squawk, która jest połączeniem systemu operacyjnego (dla niskopoziomowych urządzeń) oraz wirtualnej maszyny Java. Zielone wątki są tu używane w celu zminimalizowania ilości natywnego kodu i obsługi migracji tego, co jest izolowane (poprzez odpowiedni interfejs).
Inne maszyny wirtualne, które nadal implementują zielone wątki zamiast wsparcia dla natywnych wątków:
Wirtualna maszyna Erlanga zawiera coś co można nazwać 'zielonymi procesami' - są one podobne do procesów systemu (nie współdzielą stanu tak jak wątki), lecz są zaimplementowane wewnątrz Erlang Run Time System (erts).
W przypadku GHC Haskell, przełączanie kontekstu występuje przy pierwszej alokacji, po upłynięciu konfigurowalnego limitu czasu. W trakcie swojego życia, wątki GHC są uruchamialne na jednym lub kilku wątkach systemu operacyjnego (występuje tu relacja wiele-do-wielu pomiędzy wątkami GHC a wątkami systemu operacyjnego), pozwalając na osiągnięcie współbieżności na maszynach z wieloprocesorowością symetryczną, nie tworząc większej ilości bardziej kosztownych wątków systemu operacyjnego, niż to potrzebne do obsługi dostępnych rdzeni.
Wirtualne maszyny Smalltalka nie oceniają przebiegu działania, mimo to maszyna wirtualna ciągle może zmienić przebieg działania wątku po otrzymaniu zewnętrznego sygnału (wyczerpanie limitu czasowego, zwolnienie zasobów I/O). Niektóre implementacje Smalltalka np. QKS Smalltalk, oceniają przebieg działania, obsługują zielone wątki i zapobiegają inwersji priorytetu. W większości środowisk Smalltalka, regularnie budzący się proces o wysokim priorytecie efektywnie implementuje wywłaszczanie:
[
[(Delay forMilliseconds: 50) wait] repeat
] forkAt: Processor highIOPriority
Większość implementacji zielonych wątków nie zawiera obsługi zapobiegania przed inwersją priorytetów.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.