自从Event Machine被称为基于事件的模型异步I/O库(就像node.js一样),它是单线程的,使用事件循环来处理并发请求,因此是否真的有必要关心和在Ruby应用程序层代码(即处理请求的Rails控制器)中使用线程呢?
我更习惯Node.js模式,在其中实际上只需在回调函数中包裹代码,然后一切都会为您处理。(选择()系统调用到kqueue、epoll等产生新线程在较低级别的C++实现中处理),而且 ECMAscript 本质上也没有线程。
最近,当我试图了解Event Machine时,我看到了这段Ruby代码:
我很好奇在Ruby环境下,当事件驱动编程范式使用线程时,什么情况需要我们使用它们。我知道Ruby语言内置了线程(MRI green threads, JRuby JVM threads),所以使用线程可能是很诱人的。然而,从我的角度来看,如果你实际上不应该在更高级别的应用程序代码中担心它们,因为事件驱动模型基本上是为解决这个问题而引入的,那么这种方式有点违背了整个目的。感谢任何答案/澄清。
我更习惯Node.js模式,在其中实际上只需在回调函数中包裹代码,然后一切都会为您处理。(选择()系统调用到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 green threads, JRuby JVM threads),所以使用线程可能是很诱人的。然而,从我的角度来看,如果你实际上不应该在更高级别的应用程序代码中担心它们,因为事件驱动模型基本上是为解决这个问题而引入的,那么这种方式有点违背了整个目的。感谢任何答案/澄清。
Thread
类的一个实例覆盖了Thread
类本身。这样做后,你将无法再像在line 2
之后的line 1
中所做的那样调用预期的方法,例如new
。 - Volte