我有一个邮件解析器Perl脚本,每次邮件到达用户(使用.qmail)时被调用。它从邮件中提取日历附件,并将文件的“路径”放在使用Directory::Queue module实现的FIFO队列中。Perl IPC - 先进先出和守护进程及CPU使用
读取日历附件的路径并在本地系统以及远程CalDAV服务器上执行某些文件操作的另一个perl脚本正在作为守护进程运行,如解释here所述。所以基本上这个脚本看起来像:
my $declarations
sub foo {
.
.
}
sub bar {
.
.
}
while ($keep_running) {
for(keep-checking-the-queue-for-new-entries) {
sub caldav_logic1 {
.
.
}
sub caldav_logic2 {
.
.
}
}
}
我正在使用Proc :: Daemon运行脚本作为守护进程。现在的问题是,这个过程几乎有100%的CPU使用率。以更标准,更安全的方式实施守护进程的建议方法是什么?我使用的代码几乎与前面提到的使用Proc :: Daemon的代码相同。
你认为作为一个守护进程运行与它有什么关系?如果您不使用`Proc :: Daemon`运行脚本,它是否使用少于100%的CPU? – mob 2011-01-21 20:02:57
如果不作为守护进程运行,则不会进行连续轮询。作为一个独立的脚本,它只会读取队列中的元素(在给定的状态下通常不会太多),执行操作并退出。 – alcy 2011-01-21 20:07:58
另外,在IRC上,我被建议使用反射/ AnyEvent等来研究基于事件的编程。 – alcy 2011-01-21 20:08:39