2

来自Puma 的自述文件

在 MRI 上,有一个全局 VM 锁 (GVL),可确保一次只有一个线程可以运行 Ruby 代码。但是,如果您正在执行大量阻塞 IO(例如对 Twitter 等外部 API 的 HTTP 调用),Puma 仍然通过允许并行完成 IO 等待来提高 MRI 的吞吐量。

不幸的是,它没有解释提高 MRI 吞吐量的机制。

我知道MRI 在调用系统 IO 时会释放 GIL,但这是 MIR 而不是 Puma 的改进。

我想知道 Puma 如何并行改进阻塞 IO。

任何参考将不胜感激。

4

1 回答 1

0

Puma 正在使用反应堆模式。从Puma 4.0.0开始,Puma 使用nio4r进行事件处理,这意味着它可以利用epollkqueue等原生后端(通过libev)。(在 JRuby 上,nio4r 支持java.nio)。

于 2021-01-17T17:47:57.670 回答