在维基百科上:线程被描述为通常不能在多核上运行,而不解释原因。
在多核处理器上,本机线程实现可以自动将工作分配给多个处理器,而绿色线程实现通常不能。
我知道本机线程可以由操作系统分配给多核。有人能解释为什么绿色线程不能在多核上运行吗?是因为绿色线程是从本机线程派生/生成的,所以它们不能从本机线程上移动到另一个线程?
发布于 2013-06-06 15:12:07
我知道本机线程可以由操作系统分配给多核。有人能解释为什么绿色线程不能在多核上运行吗?
据我理解,绿色线程的一个重要目标是它们完全由软件/VM管理,而不需要操作系统干预。操作系统帮助“正常”线程分叉虚拟进程,并在多个处理器上并行运行它们。操作系统将多个绿色线程视为要在单个处理器上调度的单个线程。
引用维基百科定义
绿色线程模拟多线程环境,而不依赖任何本机OS功能,它们在用户空间而不是内核空间中进行管理,使它们能够在没有本机线程支持的环境中工作。
在单个处理器中运行对绿线程有一些重要的好处,包括没有缓存的内存同步问题、更快的启动、更好的整体同步性能。只有当它们在同一个CPU中运行时,这些好处才有可能实现。
编辑:
关于Erlang和其他语言在其“绿色线程”实现中使用多个处理器的问题,已经有很多讨论。我认为,即使语言使用“绿色”一词来描述这些问题,它们也违反了经典的定义。当然,这些术语越来越模糊,但许多人将Erlang的线程描述为“绿色进程”,以区别对待。它们绝对是轻量级的,但是“绿色线程”的概念和定义即使有重叠的但不同的实现也不应该改变。我还没有发现Erlang文档描述它们的线程处理范式。是“绿色”的。
以下是一些与此评估相一致的页面:
发布于 2013-06-06 15:10:47
简单的答案是:维基百科错了/不一致。绿色线程可以使用M:N线程。,这就是Erlang的工作原理。(我没有这方面的参考资料,但它在VM的大多数讨论中都会显示出来。)
如果你是一名语言律师,那么你可以说这不是“自动”发生的。绿色线程实现必须负责在多个本机线程上调度绿色线程,而不是由操作系统隐式地执行。尽管如此,更重要的是,绿色线程很有可能在多核系统上并行执行。
https://stackoverflow.com/questions/16965725
复制相似问题