Google начал открытие реализации модели потоков M:N

Кoмпaния Google прeдлoжилa в целях включeния в сoстaв ядрa Linux пeрвый нaбoр пaтчeй с рeaлизaциeй кoмпoнeнтoв, нeoбxoдимыx чтобы oбeспeчeния рaбoты мoдeли пoтoкoв M:N. Инициaтивa Google связана с открытием развивавшегося после закрытыми дверями API SwitchTo для ядра Linux, обеспечивающего работу реализованной в пространстве пользователя многопоточной подсистемы, применяющей образец потоков M:N. Подсистема используется в Google для того обеспечения работы сервисов, требующих минимальных задержек. Составление плана и управление распределением потоков производится целиком в пространстве пользователя, почто позволяет существенно снизить число операций переключения контекста из-за счёт минимизации выполнения системных вызовов. К обеспечения работы указанной подсистемы нате уровне ядра Linux был реализован API SwitchTo, предлагающий три базовых операции - wait, resume и swap (перепрыгивание). Для включения в состав ядра предложен шифр новой операции FUTEX_SWAP, дополняющей FUTEX_WAIT и FUTEX_WAKE, и предоставляющей основу пользу кого создания многопоточных библиотек в пространстве пользователя. FUTEX_SWAP да может применяться для передачи сообщений средь задачами, по аналогии с RPC. Например, в сегодняшний день время для передачи сообщения в среде задачами требуется выполнить как малое) четыре вызова FUTEX_WAIT и FUTEX_WAKE, пользование же FUTEX_SWAP позволит (вскочить одной операцией, которая будет выполнена в 5-10 крата быстрее. В настоящее время на практике применяются в основном модели потоков 1:1 и N:1. Лекало 1:1 используется в NPTL (POSIX потоки) и LinuxThreads, и подразумевает прямое соотнесение потока в пространстве пользователя с потоком (единицей планирования выполнения) для уровне ядра. Модель N:1 реализована в GNU Pth, выносит диспетчеризацию потоков в прогалина пользователя и позволяет N потоков в пространстве пользователя привязать к одному потоку в ядре, рядом это ядро не имеет информации о пользовательских потоках. Форма N:1 решает эту проблему, но создаёт новую - беспричинно как поток в ядре является неделимой единицей планирования выполнения, так пользовательские потоки, привязанные к одному потоку в ядре операционной системы, маловыгодный могут масштабироваться по ядрам CPU и оказываются привязанными к одному ядру CPU. Ценой данного варианта является большое запутывание реализации планировщика потоков в пространстве пользователя и потребность в механизмах согласования действий с планировщиком ядра. Арашан: http://www.opennet.ru/opennews/art.shtml?num=53443