加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 为什么在Ruby Event Machine中使用线程?

发布时间:2020-12-17 02:17:05 所属栏目:百科 来源:网络整理
导读:由于事件机器被认为是基于事件的模型异步I / O库(如node.js),它是单线程的并且使用事件循环来处理并发请求,所以真的有必要关心并在 ruby应用程序上使用线程层代码(即处理请求时的rails控制器)? 我更习惯于node.js模型,你实际上只是将你的代码包装在回调中,
由于事件机器被认为是基于事件的模型异步I / O库(如node.js),它是单线程的并且使用事件循环来处理并发请求,所以真的有必要关心并在 ruby应用程序上使用线程层代码(即处理请求时的rails控制器)?

我更习惯于node.js模型,你实际上只是将你的代码包装在回调中,然后一切都由你来处理. (生成新线程的select()系统调用kqueue,epoll等在较低级别的C实现中处理),而ECMAscript本质上也没有线程.

最近我在尝试了解Event Machine时看到了这段ruby代码:

Thread = Thread.current
Thread.new{ 
   EM.run{ thread.wakeup }
}
# pause until reactor starts
Thread.stop

我很好奇何时在ruby环境中使用基于事件的编程范例中的线程以及需要我们使用它们的具体情况.

我知道ruby在语言中内置了线程(MRI绿色线程,JRuby JVM线程),因此使用线程可能很诱人?但是,从我的观点来看,如果你真的不应该在更高级别的应用程序代码中担心它们,那么它就会失去整个目的,因为基于事件的模型几乎被引入来解决这个问题.

谢谢.感谢任何答案/澄清.

解决方法

在使用EventMachine时,你不能拥有一个cpu密集型任务,因为你在任务上花费的时间被从反应堆中“带走”,当我知道一个任务时,我会使用线程:

>被阻止(你永远不应该阻止eventmachine线程)
>使用比我的平均任务更多的CPU

在这些情况下,在单独的线程中生成任务允许它完成其工作而不会阻止反应器自己完成工作.

另一种选择是使用另一种不同的野兽纤维.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读