为什么绿色线程不能在多个核心上工作

时间:2013-06-06 15:09:35

标签: multithreading green-threads

在维基百科上:Green_threads被描述为通常不能在多核上运行而不解释原因。

  

在多核处理器上,本机线程实现可以   自动将工作分配给多个处理器,而绿色线程   实现通常不能。

我理解操作系统可以将本机线程分配给多核。有人可以解释为什么绿色线程不能在多核上运行吗?是因为绿色线程是从本机线程派生/生成的,它们无法从本机线程移动到另一个线程?

2 个答案:

答案 0 :(得分:5)

简单的答案是:维基百科错误/不一致。绿色线程可以使用M:N threading.值得注意的是,这就是Erlang的工作方式。 (我没有这方面的参考,但它出现在VM的大多数讨论中。)

如果您是语言律师,那么您可以说这不会“自动”发生。绿色线程实现必须负责在多个本机线程上调度绿色线程,而不是隐式执行此操作的操作系统。也就是说,更重要的一点是,绿色线程很可能在多核系统上并行执行。

答案 1 :(得分:1)

  

我理解操作系统可以将本机线程分配给多核。有人可以解释为什么绿色线程不能在多核上运行吗?

据我了解,绿色线程的一个重要目标是它们完全由软件/ VM 管理,无需操作系统干预。操作系统帮助“正常”线程分叉虚拟进程并在多个处理器上并行运行它们。操作系统将多个绿色线程视为在单个处理器上调度的单个线程。

引用wikipedia definition

  

绿色线程模拟多线程环境,而不依赖于任何本机操作系统功能,它们在用户空间而不是内核空间中进行管理,使它们能够在没有本机线程支持的环境中工作。

在单个处理器中运行对绿色线程有一些重要的好处,包括没有缓存的内存同步问题,更快的启动,更好的整体同步性能。只有当它们在同一个CPU中运行时,才能实现大多数这些好处。

修改

在他们的“绿色线程”实现中,有很多关于Erlang和其他语言使用多个处理器的讨论。我认为,即使语言使用“绿色”这个词来描述这些,它们也违反了经典的定义。当然,这些术语变得越来越混乱,但许多人将Erlang的线索描述为“绿色过程”以区分。它们绝对是轻量级的,但即使存在重叠但不同的实现,“绿色线程”的概念和定义也不应该改变。我还没有找到Erlang文档describe their threading paradigm为“green”。

以下是一些与此评估一致的网页: