看了 ruby 3.1 对 IO 等方法实现了 hook,参考 https://docs.ruby-lang.org/en/3.1/Fiber/SchedulerInterface.html 在 ruby 3.1 对基于 ruby IO 等的 socket、http 库等进行了测试发现确实可实现协程调度
require "fiber_scheduler"
require "open-uri"
Fiber.set_scheduler(FiberScheduler.new)
Fiber.schedule do
URI.open("https://httpbin.org/delay/2")
end
Fiber.schedule do
URI.open("https://httpbin.org/delay/2")
end
但是用基于 libcurl 的 typhoeus 则 http 请求过程还是会阻塞,因为使用的并非 ruby 的 IO 实现
require "fiber_scheduler"
require "typhoues"
Fiber.set_scheduler(FiberScheduler.new)
Fiber.schedule do
Typhoeus.get("https://httpbin.org/delay/2")
end
Fiber.schedule do
Typhoeus.get("https://httpbin.org/delay/2")
end
请问针对 如这种基于 libcurl 的 ffi 程序,有办法让 fiber scheduler 实现协程调度吗? 只有等 ruby 官方加 hook 没有自行添加 hook 的实现方式吗?