Google для включения в состав ядра Linux первый набор патчей с реализацией компонентов, необходимых для обеспечения работы модели потоков M:N. Инициатива Google связана с открытием развивавшегося за закрытыми дверями API fyrir kjarnann Linux, обеспечивающего работу реализованной в пространстве пользователя многопоточной подсистемы, применяющей модель потоков M:N. Подсистема используется в Google для обеспечения работы сервисов, требующих минимальных задержек. Планирование и управление распределением потоков производится целиком в пространстве пользователя, что позволяет существенно снизить число операций переключения контекста за счёт минимизации выполнения системных вызовов.
Для обеспечения работы указанной подсистемы на уровне ядра Linux был реализован API SwitchTo, предлагающий три базовых операции — wait, resume и swap (переключение). Для включения в состав ядра предложен код новой операции FUTEX_SWAP, дополняющей , og veitir ramma til að byggja upp fjölþráða notendarýmissöfn. FUTEX_SWAP er einnig hægt að nota til að senda skilaboð á milli verkefna, svipað og RPC. Til dæmis, eins og er, til að flytja skilaboð á milli verkefna, þarf að minnsta kosti fjögur símtöl til FUTEX_WAIT og FUTEX_WAKE, en notkun FUTEX_SWAP gerir kleift að ljúka einni aðgerð 5-10 sinnum hraðar.
Sem stendur eru flæðislíkönin 1:1 og N:1 aðallega notuð í reynd. 1:1 líkanið er notað í (POSIX þræðir) og , og felur í sér beina vörpun á þræði notendarýmis yfir á þráð (eining framkvæmdaáætlunar) á kjarnastigi. N:1 líkanið er útfært í , færir þráðaáætlun til notendarýmis og gerir N notendarýmisþráðum kleift að bindast einum þræði í kjarnanum, án þess að kjarninn viti um notendaþræði.
Helsti ókosturinn við 1:1 líkanið er mikill kostnaður við samhengisskipti á milli kjarna og notendarýmis. N:1 líkanið leysir þetta vandamál, en býr til nýjan - þar sem þráður í kjarnanum er óskiptanleg eining framkvæmdaáætlunar geta notendaþræðir sem eru bundnir einum þræði í stýrikerfiskjarnanum ekki skalast yfir CPU kjarna og verða bundnir við einn CPU kjarna.
M:N líkanið er blendingur og tekur á öllum ofangreindum göllum með því að kortleggja N notendarýmisþræði yfir á M kjarnaþræði, bæði dregur úr samhengisrofa kostnaði og mælikvarða yfir CPU kjarna. Verðið á þessum valkosti er hin mikla flækja sem fylgir innleiðingu þráðaáætlunarinnar í notendarými og þörfin fyrir kerfi til að samræma aðgerðir við kjarnaáætlunarmanninn.

Heimild: opennet.ru
