混合线程模型(M:N)实现

时间:2010-11-22 18:57:40

标签: multithreading language-design multicore

在线程调度实现中使用three个线程模型,通常由OS内核完成。其中之一是混合(M:N)模型,其中一些N应用程序线程映射到M内核线程,以便它们可以使用最多M个处理器。这种模式有利有弊。其中一个优点是基于此模型的语言将引入语言级调度程序实现,该实现负责管理和调度应用程序级线程。

  • 我想知道是否有人知道任何努力或已经完成此项工作,以便语言或图书馆可以利用它?
  • 考虑到例如Kernel 2.6.23+使用一种名为CFS的算法进行调度这一事实,您是否认为这种混合模型完全是一种明智的投资方式?

1 个答案:

答案 0 :(得分:7)

首先阅读:http://www.kegel.com/c10k.html#1:1

Linux使用从内核2.6(NPTL Native Posix线程库)开始的1:1线程模型,而今天几乎所有操作系统都转移到此模型:

  • 如果我没弄错的话,FreeBSD从7.0开始。
  • 某些版本的Solaris开始也转为1:1 - 我不记得是哪一个。

一旦Linux拥有M:N模型(这是2.4 NGPT),但1:1通常更优越。

M:N模型的最大问题是:

  1. 难以实施
  2. 当使用阻塞系统调用时,你实际上需要通知某个内核只阻止一个用户空间线程而不是内核一个
  3. 在多核时代,您希望拥有尽可能多的内核线程。
  4.   

    其中一个是混合(M:N)模型,其中应用程序的一些N个线程映射到一些M个可用处理器。

    小修正 - N个应用程序线程映射到M个内核线程,因此它们可以使用 up 到M个处理器。