Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 混合线程模型(M:N)实现_Multithreading_Language Design_Multicore - Fatal编程技术网

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

Multithreading 混合线程模型(M:N)实现,multithreading,language-design,multicore,Multithreading,Language Design,Multicore,线程调度实现中使用的线程模型通常由操作系统内核完成。其中之一是混合(M:N)模型,其中一些N应用程序线程映射到M内核线程,以便它们最多可以使用M处理器。这种模式有优点也有缺点。其优点之一是基于此模型的语言将引入一个语言级调度器实现,该实现负责管理和调度应用程序级线程 我想知道是否有人知道有什么努力或工作已经做到了这一点,以便语言或库可以利用它 例如,考虑到kernel2.6.23+使用一种称为CFS的算法进行调度,您认为这种混合模型是一种明智的投资方式吗 首先请阅读以下内容: Linux从内核

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

  • 我想知道是否有人知道有什么努力或工作已经做到了这一点,以便语言或库可以利用它
  • 例如,考虑到kernel2.6.23+使用一种称为CFS的算法进行调度,您认为这种混合模型是一种明智的投资方式吗
    • 首先请阅读以下内容:

      Linux从内核2.6(NPTL本机Posix线程库)开始使用1:1线程模型,现在几乎所有操作系统都采用这种模型:

      • 如果我没弄错的话,FreeBSD从7.0开始
      • Solaris启动的某些版本也移到了1:1-我不记得是哪一个
      Linux曾经有过M:N模型(这是在2.4NGPT中),但1:1通常更优越

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

    • 难以实施
    • 当使用阻塞系统调用时,实际上需要通知内核只阻塞一个用户空间线程,而不是内核线程
    • 在多核时代,您希望拥有尽可能多的内核线程
    • 其中之一是混合(M:N)模型,其中应用程序的一些N个线程映射到一些M个可用处理器


      小修正-N个应用程序线程映射到M个内核线程,这样它们最多可以使用M个处理器。

      这个问题是在2010年提出的。现在我们可以说golang使用了M:N thead模型。b、 t.w我正在搜索goroutine如何实现和遇到此页面的详细信息。