Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 为什么绿色线程不能在多核上工作_Multithreading_Green Threads - Fatal编程技术网

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

Multithreading 为什么绿色线程不能在多核上工作,multithreading,green-threads,Multithreading,Green Threads,在维基百科上:被描述为在没有解释原因的情况下通常无法在多核上运行 在多核处理器上,本机线程实现可以 自动将工作分配给多个处理器,而绿色线程 实现通常不能 我知道操作系统可以将本机线程分配给多核。有人能解释为什么绿色线程不能在多核上运行吗?是否因为绿色线程是从本机线程派生/派生的,它们不能从本机线程移动到另一个线程?简单的答案是:Wikipedia是错误的/不一致的。绿色线程可以利用,值得注意的是,Erlang就是这样工作的。(我没有这方面的参考资料,但它出现在大多数关于VM的讨论中。) 如果你是

在维基百科上:被描述为在没有解释原因的情况下通常无法在多核上运行

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


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

简单的答案是:Wikipedia是错误的/不一致的。绿色线程可以利用,值得注意的是,Erlang就是这样工作的。(我没有这方面的参考资料,但它出现在大多数关于VM的讨论中。)

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

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

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

引自:

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

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

编辑:

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

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


引用维基百科页面:“Erlang虚拟机拥有所谓的“绿色进程”——它们类似于操作系统进程(它们不像线程那样共享状态),但在Erlang运行时系统(erts)中实现。这些线程有时被称为“绿色线程”,但与标准绿色线程有显著差异。你评论说维基百科页面是“错误的”。我只是说,该页面特别指出,就软件绿色线程而言,Erlang线程是非标准的。@Gray抱歉,这听起来就像是对我进行了任意的区分。在没有定义什么是“标准”,或者这些差异是什么以及它们为什么重要的情况下,您引用的声明本质上是“它们之所以不同,是因为它们是”。我要说的是,wikipedia将绿色线程定义为单CPU,而Erlang线程是非标准的。如果你想提供一个替代的源代码作为定义,那么很好,但是你只是不同意他们的定义。伙计们,我提到的绿色线程非常类似于从eventlet libarary派生的python绿色线程。我们不要再讨论Erlang的案子了,反对票很简单。你错了。你的回答有误导性。这几乎就是下行投票系统的全部要点。