首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么绿色线程不能在多个核心上工作?

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

Stack Overflow用户
提问于 2013-06-06 15:09:34
回答 2查看 2.1K关注 0票数 6

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-06 15:12:07

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

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

引用维基百科定义

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

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

编辑:

关于Erlang和其他语言在其“绿色线程”实现中使用多个处理器的问题,已经有很多讨论。我认为,即使语言使用“绿色”一词来描述这些问题,它们也违反了经典的定义。当然,这些术语越来越模糊,但许多人将Erlang的线程描述为“绿色进程”,以区别对待。它们绝对是轻量级的,但是“绿色线程”的概念和定义即使有重叠的但不同的实现也不应该改变。我还没有发现Erlang文档描述它们的线程处理范式。是“绿色”的。

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

  • 原生线与绿线
  • 四岁
  • 绿色对决。本地线程
  • “绿色”线程和“本地”线程之间有什么区别?
票数 2
EN

Stack Overflow用户

发布于 2013-06-06 15:10:47

简单的答案是:维基百科错了/不一致。绿色线程可以使用M:N线程。,这就是Erlang的工作原理。(我没有这方面的参考资料,但它在VM的大多数讨论中都会显示出来。)

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16965725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档