我读过像daemon这样的永久进程应该在while(1)或for(;;)循环中使用sleep()运行。他们说,这是必需的,否则这个过程总是在运行队列中,并且内核将始终运行它。这将阻止其他进程。我不同意它会完全阻止其他进程。如果有时间切片,那么它将执行其他过程。但是,它肯定会从别人那里偷走一段时间。由于此过程始终处于运行状态,因此延迟其他过程。默认情况下,Linux以循环方式运行。第一项任务是交换,然后是其他任务。这是一个循环链接列表,其中第一个任务为swapd(process-id为0),然后是其他任务。我相信这仍然是基于时间分割的。每个过程的特定时间。这些任务只不过是过程描述符。我相信这个链接列表是由init进程维护的。如果我错了,请在这里纠正我。其他问题是如果我们需要睡觉(),那么它的价值应该是什么?我们如何确定睡眠价值以获得最佳结果?在Linux中运行永久进程时,我们是否需要sleep()?
回答
睡眠迫使os将执行传递给另一个线程,因此是有帮助的,或者至少是公平的。从睡眠开始。应该可以。
为什么downvote,这个声明有什么问题? – icbytes
不是我的失望,但我可以解释。所有sleep(1)循环中的99.99%是可避免引入的CPU浪费和延迟。像@usr在上面解释的那样,线程应该做有用的工作或者根本不运行(即阻塞I/O或线程间信号)。 –
如果您的程序有用,请不要扼杀它。一个程序可以通过阻止像IO等东西来移出运行队列。
如果你正在编写一个可以旋转任意次数的轮询循环,你可能想用sleep
来调节一下,因为旋转经常没有什么价值。
也就是说,轮询循环是最后手段。通常情况下,程序对每条指令执行有用的工作,所以他们根本不会睡觉。
你能否详细说明IO和等待操作? –
当一个线程从一个文件读取时,它必须阻塞,直到字节可用。在那段时间内核会去除线程。一个磁盘读取了一些内容,它会通过中断通知内核IO已完成。然后内核将标记等待的线程再次准备好。 – usr
即使我正在写文件时,这是否为真?当我写和冲洗它。内核将有时间安排其他工作。 –
睡眠几乎肯定是错误的解决方案。
通常你所做的就是调用一个阻塞函数,当你需要做某些事情时它会唤醒你。
例如,如果您是网络服务,您希望在请求到达之前保持不活动状态。
换句话说,你的守护进程的核心不应该是这样的:
while(1)
{
if (checkIfSomethingToDo())
doSomething();
else
sleep(1);
}
而是有点像这样:
while(1)
{
int ret = poll(fds, nfds, -1);
if (ret > 0)
doSomething();
}
有内核你入睡,直到有实际要做的工作。实现起来并不难,你会更加高效(不会从别人那里窃取CPU时间,只是浪费它不做实际的工作),并且响应延迟也会下降。
- 1. 运行Gradlelw需要永久
- 2. 运行hmset()需要永久
- 3. For循环需要永久运行
- 4. Matlab dir()需要永久运行
- 5. 我们什么时候需要非永久偏好?
- 6. Teamviewer linux没有永久运行的守护进程
- 7. 需要永久运行的应用程序的编程语言
- 8. 我需要知道一个进程是否正在运行
- 9. 我们是否需要在IE8中对此进行区分?
- 10. 我们是否需要在WebRTC中进行会话?
- 11. Linux进程是否正在运行?
- 12. QThread :: sleep()是否需要事件循环才能运行?
- 13. 为什么我的脚本需要永久运行?
- 14. 我们是否需要对我们的应用程序进行数字签名?
- 15. 我们是否需要在heroku上添加security.yml进行部署?
- 16. 我们是否需要ezpublish_legacy?
- 17. 我们需要在Android 6.0运行时需要哪些权限
- 18. 在SQL的WHILE循环中运行UPDATE语句需要永久运行
- 19. MDX查询需要永久运行在jPivot
- 20. 在PHP中永久运行后台进程
- 21. 永久运行多久
- 22. Git推动需要永久
- 23. SORT转换需要永久
- 24. 刀ec2 bootstrap需要永久
- 25. 我们是否需要使用插件进行模块化
- 26. 我们是否需要iPhone/iPad进行开发?
- 27. 我们是否需要使用webpack和typescript/angular2进行抖动?
- 28. 我们是否需要setTimeout进行短轮询?
- 29. DynamoDB:我们是否需要使用Amazon DynamoDB进行ODM?
- 30. 我们是否需要安装RTC Build toolkit来运行jenkins?
“默认情况下,Linux以循环方式运行。”不,默认调度程序不是简单的循环调度程序。但请注意,您很少需要在守护进程中进行睡眠。相反,您想等待某件事 - 例如观察事件的文件描述符(使用选择/投票) – nos
是的,投票和睡眠是一个非常糟糕的计划(除非在每分钟投票次数少于一次的情况下)。相反,循环应该等待一些消息或事件 - 不需要实际睡眠,因为等待会更好地完成同样的事情。 –