Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何在不阻塞的情况下轮询web请求?_Perl - Fatal编程技术网

Perl 如何在不阻塞的情况下轮询web请求?

Perl 如何在不阻塞的情况下轮询web请求?,perl,Perl,我有两个web请求,我需要进行轮询以确定它们何时返回。理想情况下,我不想一直在一个紧密的循环中测试它们。我想释放CPU,以便其他进程可以执行 我目前正在使用Perl的Time::HiRes::sleep(0.100)函数在测试web请求是否返回之前释放CPU 在负载测试期间,我可以看到睡眠时间“延长”。理想情况下,我希望确保遵守睡眠持续时间,但释放CPU。我应该调用不同的函数来实现这一点吗 我正在Linux 2.6上编写Perl代码。与其轮询,不如查看是否无法获取文件描述符并执行select调用

我有两个web请求,我需要进行轮询以确定它们何时返回。理想情况下,我不想一直在一个紧密的循环中测试它们。我想释放CPU,以便其他进程可以执行

我目前正在使用Perl的Time::HiRes::sleep(0.100)函数在测试web请求是否返回之前释放CPU

在负载测试期间,我可以看到睡眠时间“延长”。理想情况下,我希望确保遵守睡眠持续时间,但释放CPU。我应该调用不同的函数来实现这一点吗


我正在Linux 2.6上编写Perl代码。

与其轮询,不如查看是否无法获取文件描述符并执行select调用

然后,一旦发生任何事情,您就可以重新获得控制权,而不会占用CPU

web请求中的某个地方将有一些套接字,这些套接字的附件将是可以在select中使用的文件描述符

在任何情况下,您的程序可以在任何时间点中断任何时间;如果这是一个真正的问题,您需要一个实时操作系统,但由于您正在处理web请求,我怀疑您是否需要那种级别的响应能力


实际上,您需要的是一个高级接口,它为您执行select调用。正如评论中所建议的那样:看起来它会完全满足您的需要。

我认为在常规Linux上无法保证睡眠时间。这几乎就是“实时”操作系统的要点,而普通Linux不是“实时”操作系统


我同意@Douglas Leeder的观点:使用select调用让内核在发生更改时通知您。您还可以通过select调用模拟亚秒级睡眠,但Time::HiRes是一个更干净的界面(而且您仍然无法避免延长等待时间)。

听起来您确实想要一个事件循环。有 , ,及

无论哪种方式,都不要自己实现。这个轮子已经坏了
这就是HTTP::Async在幕后所做的——看看代码,看看它是如何做到的:这正是我的意思。