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
多线程ruby程序只使用100%的cpu_Ruby_Multithreading - Fatal编程技术网

多线程ruby程序只使用100%的cpu

多线程ruby程序只使用100%的cpu,ruby,multithreading,Ruby,Multithreading,我用的是ruby head和Debian wheezy x64。当我运行一个多线程ruby脚本时,htop显示它在视觉上使用了多个内核,顶部有条,并且它在进程列表上使用了100%的CPU,但只使用了一个内核100%的容量。我假设有可能有多个内核以100%的速度运行,这个数字似乎太方便了,无法被程序逻辑或其他硬件方面所限制。操作系统是否限制了我使用的可用指令的数量,如果是,我如何停止 编辑更多信息: 当我指的是视觉上使用多个核心时,例如:47%的核心1、29%的核心2和24%的核心3。这些百分比在

我用的是ruby head和Debian wheezy x64。当我运行一个多线程ruby脚本时,htop显示它在视觉上使用了多个内核,顶部有条,并且它在进程列表上使用了100%的CPU,但只使用了一个内核100%的容量。我假设有可能有多个内核以100%的速度运行,这个数字似乎太方便了,无法被程序逻辑或其他硬件方面所限制。操作系统是否限制了我使用的可用指令的数量,如果是,我如何停止

编辑更多信息:

当我指的是视觉上使用多个核心时,例如:47%的核心1、29%的核心2和24%的核心3。这些百分比在不断地上下移动,并转移到不同的核心集,但总的来说,加起来是100%-102%。使用的磁芯超过3个(总共8个),但除三个负载最重的磁芯以外的任何磁芯仅使用2%或更少的容量。我想我还应该提到这是一个linode VPS

编辑:


看起来我读到的承诺是2.0将采用真正的并行线程,而不是实际的发布信息。是时候切换到Jruby了…

MRI在其解释器中将Ruby线程实现为绿色线程。不幸的是,它不允许并行调度这些线程,它们一次只能运行一个线程


请参阅类似的问题

您没有提到您使用的是哪个Ruby实现。并非所有Ruby实现都能够将Ruby线程调度到多个CPU

特别是:

  • MRI在解释器中以绿色线程的形式实现Ruby线程,并自行调度它们;它不能一次调度多个线程,也不能将它们调度到多个CPU
  • YARV将Ruby线程实现为本机OS线程(POSIX线程或Windows线程),并允许操作系统对其进行调度,但它会在其周围设置一个巨大的VM锁(GVL),以便在任何给定时间只能运行一个Ruby线程
  • Rubinius将Ruby线程实现为本机操作系统线程(POSIX线程或Windows线程),并允许操作系统对其进行调度,但它会在其周围设置一个全局解释器锁(GIL),以便在任何给定时间只能运行一个Ruby线程;Rubinius 2.0将拥有细粒度的锁,以便多个Ruby线程可以在任何给定时间运行
  • JRuby将Ruby线程实现为JVM线程,并使用细粒度锁定,以便可以运行多个线程;然而,这些线程是否被调度到多个CPU取决于所使用的JVM,有些允许,有些不允许
  • IronRuby将Ruby线程实现为CLI线程,并使用细粒度锁定,以便可以运行多个线程;然而,这些线程是否被调度到多个CPU取决于所使用的VE,有些允许,有些不允许
  • MacRuby将Ruby线程实现为本机OS线程,并使用细粒度锁定,以便多个线程可以同时在多个CPU上运行

我对黄玉、红衣主教、磁浮、摩鲁比和所有其他的东西了解不够。

我以为ruby 2.0解决了这个问题。另外,我不确定你的回答是否有意义,因为我清楚地看到操作系统显示了正在使用的多个内核。不,在ruby中要与真正的多线程兼容需要做大量工作。啊,对不起。看起来我只是在看这部电影的承诺。切换到Jruby的时间到了。由于格式错误,提供给的链接@rudolph9是404。此评论包含一个固定链接。@Excalibur感谢您让我知道我将更新我的帖子。