Ruby Fibers可以并行吗?

我试图在我的程序中加快速度,并且我被告知Ruby Fibers比线程更快并且可以利用多个内核。 我环顾四周,但我无法找到如何实际运行不同的光纤。 使用线程你可以做到这一点:

threads = []

threads << Thread.new {Do something}
threads << Thread.new {Do something}

threads.each {|thread| thread.join}

我看不出如何用纤维做这样的事情。 我能找到的只有yieldresume ,这似乎只是一堆光纤之间的起始和停止。 有没有办法用光纤来实现真正的并发?


不,你不能对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

上一篇: Can Ruby Fibers be Concurrent?

下一篇: Benefits of using async and await keywords