Прежде всего прочитайте это: http://www.kegel.com/c10k.html#1:1
Linux использует модель потоков 1: 1, начиная с ядра 2.6 (библиотека потоков NPTL Native Posix), и сегодня почти все операционные системы переходят на эту модель:
- FreeBSD начиная с 7.0, если я не ошибаюсь.
- Solaris, начиная с какой-то версии, также перешел на 1: 1 - я не помню, какая именно.
Когда-то в Linux была модель M: N (это было в 2.4 NGPT), но 1: 1, как правило, лучше.
Самая большая проблема с моделью M: N:
- Трудно реализовать
- Когда вы используете блокировку системных вызовов, вам нужно как-то уведомить ядро, чтобы оно блокировало только один поток пользовательского пространства, а не ядро одного
- В эпоху многоядерных процессоров вы хотите иметь как можно больше потоков ядра.
Одной из них является гибридная (M: N) модель, в которой некоторые N потоков приложения отображаются на несколько доступных процессоров M.
Небольшое исправление - N потоков приложений сопоставлены с потоками ядра M, чтобы они могли использовать up для процессоров M.