异步事件模型的 Self-pipe trick
原文中文,约2100字,阅读约需5分钟。发表于: 。异步事件模型中有一个重要问题是,当你的 select/poll 循环陷入等待时,没有办法被另外一个线程被唤醒,这导致了一系列问题: 1)在没有 pselect/ppoll 的系统上,信号无法中断 select/poll 等待,得不到即时处理; 2)另一个线程投递过来的消息,由于 select/poll 等待,无法得到即时处理; 3)调短 select/poll...
在异步事件模型中,select/poll 循环等待时无法被其他线程唤醒,导致信号和消息处理延迟。为解决此问题,可以使用 self-pipe trick,通过创建匿名管道或 socketpair 实现唤醒机制。使用 notify() 函数避免重复写入管道,确保管道数据清空后处理网络事件和消息队列。主循环设置超时以处理网络和时钟事件。