来自彪马的自述:
MRI上有一个全局VM锁(GVL(,它确保一次只有一个线程可以运行Ruby代码。但是,如果你正在进行大量的IO阻塞(例如对Twitter等外部API的HTTP调用(,Puma仍然可以通过允许IO并行等待来提高MRI的吞吐量。
不幸的是,它没有解释提高MRI吞吐量的机制。
我知道MRI在调用系统IO时会释放GIL,但这是MIR而不是彪马的改进。
我想知道彪马是如何改进并行阻塞IO的。
如有任何参考,不胜感激。
Puma正在使用反应堆模式。自Puma 4.0.0以来,Puma使用nio4r进行事件处理,这意味着它可以使用epoll和kqueue等本地后端(通过libev(。(在JRuby上,nio4r支持java.nio(.