Реализация модели гибридной резьбы (M: N) - PullRequest
8 голосов
/ 22 ноября 2010

Существуют три модели потоков, которые используются в реализациях планирования потоков, обычно выполняемых ядрами ОС. Одной из них является гибридная (M:N) модель, в которой некоторые N потоки приложения отображаются на M потоки ядра, так что они могут использовать до M процессоров. Есть плюсы и минусы этой модели. Одним из преимуществ является то, что языки, основанные на этой модели, представят реализацию планировщика уровня языка, который отвечает за управление и планирование потоков уровня приложения.

  • Мне было интересно, знает ли кто-нибудь какое-либо усилие или работу, которая уже сделала это, чтобы язык или библиотека могли воспользоваться этим?
  • Учитывая, например, тот факт, что в ядре 2.6.23+ для планирования используется алгоритм CFS, считаете ли вы, что эта гибридная модель вообще будет разумным подходом для инвестирования?

1 Ответ

8 голосов
/ 22 ноября 2010

Прежде всего прочитайте это: 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:

  1. Трудно реализовать
  2. Когда вы используете блокировку системных вызовов, вам нужно как-то уведомить ядро, чтобы оно блокировало только один поток пользовательского пространства, а не ядро ​​одного
  3. В эпоху многоядерных процессоров вы хотите иметь как можно больше потоков ядра.

Одной из них является гибридная (M: N) модель, в которой некоторые N потоков приложения отображаются на несколько доступных процессоров M.

Небольшое исправление - N потоков приложений сопоставлены с потоками ядра M, чтобы они могли использовать up для процессоров M.

...