首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby Fibers可以并发吗?

Ruby Fibers可以并发吗?
EN

Stack Overflow用户
提问于 2010-06-18 07:48:46
回答 3查看 3.7K关注 0票数 13

我正试图在我的程序中获得一些速度,我被告知Ruby Fibers比线程更快,并且可以利用多核的优势。我环顾了四周,但我就是找不到如何同时运行不同的纤程。使用线程,您可以执行以下操作:

代码语言:javascript
复制
threads = []

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

threads.each {|thread| thread.join}

我不知道怎么用纤维做这样的事情。我能找到的只有yieldresume,它们看起来就像是纤维之间的一堆开始和停止。有没有办法用纤程实现真正的并发性?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-18 08:07:21

不,你不能用Fibers进行并发。Fibers根本不是一个并发构造,它们是一个控制流构造,就像Exceptions一样。这就是Fibers的全部要点:它们从不并行运行,它们是协作的,它们是确定性的。Fiber是协程。(事实上,我从来不明白为什么它们不被简单地称为Coroutines。)

Ruby中唯一的并发构造是Thread

票数 16
EN

Stack Overflow用户

发布于 2014-05-15 23:16:39

并发性和并行性之间似乎存在术语问题。

,我就是找不到如何同时运行不同的纤程。

我认为你实际上谈论的是并行性,而不是并发性:

Concurrency是指两个任务可以在重叠的时间段内启动、运行和完成。这并不一定意味着它们会同时运行。例如:在单核机器上进行多任务处理。Parallelism是指任务从字面上看同时运行,例如。在多核处理器上

引用:Concurrency vs Parallelism - What is the difference?

这里还很好地说明了:http://concur.rspace.googlecode.com/hg/talk/concur.html#title-slide

所以我要回答这个问题:

Ruby是在

中实现轻量级协作并发的原语。

http://www.ruby-doc.org/core-2.1.1/Fiber.html

这并不意味着它可以并行运行。

票数 14
EN

Stack Overflow用户

发布于 2010-06-20 04:27:55

如果你想要真正的并发性,你会想要在jruby中使用线程(它实际上没有纤程,它只有线程,每个纤程一个)。

另一种选择是“分叉”到新的进程,它可以在MRI上真正并行运行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3066392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档