gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:34:43 25 4
gpt4 key购买 nike

既然说event machine是单线程的基于事件模型的异步I/O库(类似node.js),使用event loop来处理并发请求,真的有必要关心和使用threading吗ruby 应用层代码(即处理请求时的 rails Controller )?

我更习惯于 node.js 模型,您实际上只需将代码包装在回调中,然后一切都会为您处理。 (对产生新线程的 kqueue、epoll 等的 select() 系统调用在较低级别的 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 密集型任务,因为您花在任务上的时间是从 react 器中“带走”的,当我知道任务将要执行以下操作时,我会使用线程:

  • 阻塞(你永远不应该阻塞 eventmachine 线程)
  • 使用比我的平均任务更多的 cpu

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

另一种选择是使用纤维,这是另一种不同的野兽。

关于ruby-on-rails - 为什么在 Ruby Event Machine 中使用线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9186805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com