Jes*_*sky 13 ruby concurrency fibers
我试图在我的程序中加快速度,并且我被告知Ruby Fibers比线程更快并且可以利用多个核心.我环顾四周,但我找不到如何实际同时运行不同的纤维.使用线程,您可以执行此操作:
threads = []
threads << Thread.new {Do something}
threads << Thread.new {Do something}
threads.each {|thread| thread.join}
Run Code Online (Sandbox Code Playgroud)
我看不出如何用纤维做这样的事情.所有我能找到的是yield
和resume
这似乎是只是一堆开始与纤维之间停止.有没有办法用光纤实现真正的并发?
Jör*_*tag 16
不,你不能用Fiber
s 做并发.Fiber
s根本不是并发构造,它们是一个控制流构造,就像Exception
s 一样.这就是整点的Fiber
S:他们从来不并行运行,他们的合作,他们是确定性的.Fiber
是协程.(事实上,我从未明白为什么他们不仅仅被称为Coroutine
s.)
Ruby中唯一的并发构造是Thread
.
wac*_*cha 13
并发和并行之间似乎存在术语问题.
我无法找到如何实际同时运行不同的光纤.
我认为你实际上谈的是并行性,而不是并发性:
并发是指两个任务可以在重叠的时间段内启动,运行和完成.这并不一定意味着它们都会在同一时刻运行.例如.在单核机器上进行多任务处理.并行性是指任务在同一时间运行,例如.在多核处理器上
引用:并发与并行 - 有什么区别?.
这里也很好地说明了:http: //concur.rspace.googlecode.com/hg/talk/concur.html#title-slide
所以回答这个问题:
Fibers是在Ruby中实现轻量级协同并发的原语.
这并不意味着它可以并行运行.