Perl 如何在不阻塞的情况下轮询web请求?
我有两个web请求,我需要进行轮询以确定它们何时返回。理想情况下,我不想一直在一个紧密的循环中测试它们。我想释放CPU,以便其他进程可以执行 我目前正在使用Perl的Time::HiRes::sleep(0.100)函数在测试web请求是否返回之前释放CPU 在负载测试期间,我可以看到睡眠时间“延长”。理想情况下,我希望确保遵守睡眠持续时间,但释放CPU。我应该调用不同的函数来实现这一点吗Perl 如何在不阻塞的情况下轮询web请求?,perl,Perl,我有两个web请求,我需要进行轮询以确定它们何时返回。理想情况下,我不想一直在一个紧密的循环中测试它们。我想释放CPU,以便其他进程可以执行 我目前正在使用Perl的Time::HiRes::sleep(0.100)函数在测试web请求是否返回之前释放CPU 在负载测试期间,我可以看到睡眠时间“延长”。理想情况下,我希望确保遵守睡眠持续时间,但释放CPU。我应该调用不同的函数来实现这一点吗 我正在Linux 2.6上编写Perl代码。与其轮询,不如查看是否无法获取文件描述符并执行select调用
我正在Linux 2.6上编写Perl代码。与其轮询,不如查看是否无法获取文件描述符并执行select调用 然后,一旦发生任何事情,您就可以重新获得控制权,而不会占用CPU web请求中的某个地方将有一些套接字,这些套接字的附件将是可以在select中使用的文件描述符 在任何情况下,您的程序可以在任何时间点中断任何时间;如果这是一个真正的问题,您需要一个实时操作系统,但由于您正在处理web请求,我怀疑您是否需要那种级别的响应能力
实际上,您需要的是一个高级接口,它为您执行select调用。正如评论中所建议的那样:看起来它会完全满足您的需要。我认为在常规Linux上无法保证睡眠时间。这几乎就是“实时”操作系统的要点,而普通Linux不是“实时”操作系统
我同意@Douglas Leeder的观点:使用select调用让内核在发生更改时通知您。您还可以通过select调用模拟亚秒级睡眠,但Time::HiRes是一个更干净的界面(而且您仍然无法避免延长等待时间)。听起来您确实想要一个事件循环。有 , ,及 无论哪种方式,都不要自己实现。这个轮子已经坏了
这就是HTTP::Async在幕后所做的——看看代码,看看它是如何做到的:这正是我的意思。