Firma Google do włączenia w jądro Linux pierwszy zestaw poprawek implementujących komponenty potrzebne do działania modelu wątków M:N. Inicjatywa Google wiąże się z otwarciem rozwijanego za zamkniętymi drzwiami API dla jądra Linux, zapewniającego działanie zaimplementowanej w przestrzeni użytkownika wielowątkowej podsystemu, stosującej model wątków M:N. Podsystem jest używany w Google do świadczenia usług wymagających minimalnych opóźnień. Planowanie i zarządzanie przydzielaniem wątków odbywa się całkowicie w przestrzeni użytkownika, co pozwala znacznie zredukować liczbę operacji przełączania kontekstu dzięki minimalizacji wywołań systemowych.
Aby zapewnić działanie wymienionego podsystemu na poziomie jądra Linux, zaimplementowano API SwitchTo, oferujące trzy podstawowe operacje — wait, resume i swap (przełączenie). Zaproponowano kod nowej operacji FUTEX_SWAP, uzupełniającej , i stanowiącej podstawę do tworzenia wielowątkowych bibliotek w przestrzeni użytkownika. FUTEX_SWAP może być również używany do przesyłania wiadomości między zadaniami, analogicznie do RPC. Na przykład obecnie do przesłania wiadomości między zadaniami konieczne jest wykonanie co najmniej czterech wywołań FUTEX_WAIT i FUTEX_WAKE, natomiast użycie FUTEX_SWAP umożliwi realizację jednej operacji, która zostanie wykonana 5-10 razy szybciej.
Obecnie w praktyce stosowane są głównie modele wątków 1:1 i N:1. Model 1:1 jest używany w (wątki POSIX) i , i oznacza bezpośrednie odwzorowanie wątku w przestrzeni użytkownika na wątek (jednostkę planowania wykonania) na poziomie jądra. Model N:1 jest zaimplementowany w , przenoszącym dyspozycję wątków do przestrzeni użytkownika i pozwalającym N wątkom w przestrzeni użytkownika przypisać się do jednego wątku w jądrze, przy czym jądro nie ma informacji o wątkach użytkownika.
Podstawową wadą modelu 1:1 są duże koszty związane z przełączaniem kontekstu między jądrem a przestrzenią użytkownika. Model N:1 rozwiązuje ten problem, ale stwarza nowy — ponieważ strumień w jądrze jest niepodzielną jednostką planowania wykonania, strumienie użytkownika przypisane do jednego strumienia w jądrze systemu operacyjnego nie mogą skalować się na rdzeniach CPU i są ograniczone do jednego rdzenia CPU.
Model M:N jest hybrydowy i eliminuje wszystkie wyżej wymienione wady dzięki przyporządkowaniu N strumieni w przestrzeni użytkownika do M strumieni w jądrze OS, co pozwala zarówno na zmniejszenie kosztów przełączania kontekstu, jak i zapewnienie skalowalności na rdzeniach CPU. Cennikiem tego rozwiązania jest znaczne skomplikowanie implementacji planisty strumieni w przestrzeni użytkownika oraz konieczność mechanizmów synchronizacji działań z planistą jądra.

Źródło: opennet.ru
