【发布时间】:2023-04-04 08:48:01
【问题描述】:
在维基百科上:Green_threads 被描述为通常无法在不解释原因的情况下在多核上运行。
在多核处理器上,本机线程实现可以 自动将工作分配给多个处理器,而绿色线程 实现通常不能。
我了解操作系统可以将本机线程分配给多核。有人可以解释为什么绿色线程不能在多核上运行吗?是不是因为绿色线程是从本机线程派生/派生的,它们不能从本机线程移动到另一个?
【问题讨论】:
标签: multithreading green-threads
在维基百科上:Green_threads 被描述为通常无法在不解释原因的情况下在多核上运行。
在多核处理器上,本机线程实现可以 自动将工作分配给多个处理器,而绿色线程 实现通常不能。
我了解操作系统可以将本机线程分配给多核。有人可以解释为什么绿色线程不能在多核上运行吗?是不是因为绿色线程是从本机线程派生/派生的,它们不能从本机线程移动到另一个?
【问题讨论】:
标签: multithreading green-threads
简单的答案是:维基百科是错误的/不一致的。绿色线程可以使用M:N threading. 值得注意的是,这就是Erlang 的工作方式。 (我没有这方面的参考资料,但它出现在大多数关于 VM 的讨论中。)
如果您是一名语言律师,那么您可以说这不会“自动”发生。绿色线程实现必须负责在多个本机线程上调度绿色线程,而不是操作系统隐式执行此操作。也就是说,更重要的一点仍然存在,即绿色线程很有可能在多核系统上并行执行。
【讨论】:
我了解操作系统可以将本机线程分配给多核。谁能解释一下为什么绿色线程不能在多核上运行?
据我了解,绿色线程的重要目标之一是它们完全由软件/VM 管理, 没有操作系统干预。正是操作系统帮助“正常”线程分叉虚拟进程并在多个处理器上并行运行它们。操作系统将多个绿色线程视为要在单个处理器上调度的单个线程。
绿色线程在不依赖任何本机操作系统功能的情况下模拟多线程环境,并且在用户空间而不是内核空间中进行管理,使它们能够在不支持本机线程的环境中工作。
在单处理器中运行对绿色线程有一些重要的好处,包括没有缓存内存同步问题、更快的启动、更好的整体同步性能。大多数这些好处只有在同一个 CPU 中运行时才有可能实现。
编辑:
已经有很多关于 Erlang 和其他语言在其“绿色线程”实现中使用多个处理器的讨论。我认为即使语言使用“绿色”一词来描述这些,它们也违反了经典定义。当然,这些术语越来越模糊,但许多人将 Erlang 的线程描述为“绿色进程”以进行区分。它们绝对是轻量级的,但即使存在重叠但不同的实现,“绿色线程”的概念和定义也不应改变。我还没有找到 Erlang 文档 describe their threading paradigm 为“绿色”。
以下是一些同意此评估的页面:
【讨论】: