Ruby Fibers可以并行吗?
我试图在我的程序中加快速度,并且我被告知Ruby Fibers比线程更快并且可以利用多个内核。 我环顾四周,但我无法找到如何实际运行不同的光纤。 使用线程你可以做到这一点:
threads = []
threads << Thread.new {Do something}
threads << Thread.new {Do something}
threads.each {|thread| thread.join}
我看不出如何用纤维做这样的事情。 我能找到的只有yield
和resume
,这似乎只是一堆光纤之间的起始和停止。 有没有办法用光纤来实现真正的并发?
不,你不能对Fiber
进行并发。 Fiber
并不是一个并发结构,它们是一个控制流结构,就像Exception
一样。 这就是Fiber
的全部重点:它们从不平行运行,它们是合作的,它们是确定性的。 Fiber
是协同程序。 (事实上,我从来不明白他们为什么不简单地称为Coroutine
。)
Ruby中唯一的并发构造是Thread
。
似乎在并发和并行之间存在术语问题。
我无法找到如何实际运行不同的光纤。
我想你实际上谈论的是并行性,而不是并发性:
并发性是指两个任务可以在重叠时间段内启动,运行并完成。 这并不一定意味着他们都会在同一时刻跑步。 例如。 在单核机器上进行多任务处理。 并行是指任务在同一时间运行,例如。 在多核处理器上
引用:并发VS并行 - 有什么区别?
这里也有很好的说明:http://concur.rspace.googlecode.com/hg/talk/concur.html#title-slide
所以要回答这个问题:
Fibers是在Ruby中实现轻量级协作并发的原始语言。
http://www.ruby-doc.org/core-2.1.1/Fiber.html
这并不意味着它可以并行运行。
如果你想要真正的并发性,你会想用jruby使用线程,我相信。
链接地址: http://www.djcxy.com/p/13927.html