【问题标题】:Hybrid Thread Model (M:N) Implementation混合线程模型 (M:N) 实现
【发布时间】:2010-11-22 18:57:39
【问题描述】:

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

  • 我想知道是否有人知道任何努力或工作已经这样做了,以便语言或库可以利用它?
  • 考虑到例如内核 2.6.23+ 使用称为 CFS 的算法进行调度这一事实,您认为这种混合模型是否是一种明智的投资方法?

【问题讨论】:

  • 这个问题是在 2010 年提出的。现在我们可以说 golang 使用了 M:N thead model 。顺便说一句,我正在搜索 goroutine 如何实现和计算此页面的详细信息。

标签: multithreading language-design multicore


【解决方案1】:

首先阅读这个: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. 在多核时代,您希望拥有尽可能多的内核线程。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2018-10-22
    • 2017-04-03
    • 2017-10-23
    相关资源
    最近更新 更多