导读:近期更新了《IO_select》的相关内容,包括《如何用Ruby的IO.select配合Fiber.scheduler检测代码中的阻塞调用?》、《Ruby中IO.select和Timer线程混用有哪些坑?如何正确处理IO等待与定时任务》。如果 IO_select 对你有帮助,请转发和分享本内容。知识因分享而拥有更大能量,感谢您成为这传播链条中的重要一环。
如何用Ruby的IO.select配合Fiber.scheduler检测代码中的阻塞调用? 在Ruby非阻塞编程里,把本该异步的IO操作写成同步阻塞是很隐蔽的性能陷阱。Fiber.scheduler接管线程调度后,若某段逻辑直接调用底层阻塞方法,事件循环会被卡住。IO.select作为底层多路复用接口,可用来在调度器钩子中埋点:当Fiber即将执行可能产生阻塞的系统调用前,先用IO.select... 栏目:Ruby 时间:08-11 IO_select Fiber_scheduler 阻塞调用检测
Ruby中IO.select和Timer线程混用有哪些坑?如何正确处理IO等待与定时任务 把定时任务放进独立线程,主线程用IO.select等套接字数据,是不少Ruby网络程序的自然写法。但Ruby的IO.select在阻塞期间不会让出GIL给计时器线程准时触发,导致定时回调延迟甚至堆叠。另外,信号中断和select超时设置不当会让定时逻辑完全失序。本文从底层调度原理讲清两者冲突... 栏目:Ruby 时间:08-10 Ruby IO_select Timer_thread