sleep vs SIG_ALARM用法和CPU性能

时间:2014-12-11 22:39:37

标签: c linux sleep interrupt

我应该何时使用sleep()并重新配置SIG_ALRM

例如,我想在某个特定时间安排某项任务。我可以生成一个内部有sleep()调用的线程,当sleep()返回时,执行一些任务,或者我可以为SIG_ALRM指定一个处理程序并在警报中断内执行任务。他们是否采用相同的CPU使用率和时间? (除了线程)。

我做了一些"测试"使用ps命令查看进程,向我显示 CPU% 0 的 CPU TIME ,但我'我想知道我是否遗漏了某些东西,或者我正在查看错误的数据。

是的,我正在使用Linux。

1 个答案:

答案 0 :(得分:2)

请注意,您在信号处理程序中执行的操作非常有限。您只能调用某些POSIX函数,并且不允许使用大多数C库。当然不是任何可能分配或释放内存或执行I / O的C函数(可以使用一些POSIX I / O调用)。

睡眠线程可能是您最简单的方法。如果您使用nanosleep,它根本不会产生信号,因此您不会需要处理这些处理程序。

如果你的程序正在运行,一个常见的模式是有一个中央工作循环,在那个循环中你可以定期检查时间,看看你是否应该运行你的延迟工作。或者您可以跳过检查时间并检查标志变量,而不是SIG_ALARM处理程序将设置的变量。设置sig_atomic_t变量是允许信号处理程序执行的操作之一。

睡眠任务的CPU使用率为零。它作为计时器事件进入内核,并在计时器到期时被唤醒运行。