为什么在循环中使用sleep(while或for var i)

时间:2015-08-26 01:41:23

标签: php apache

我在php中有一个很长的轮询,建议使用sleep(x秒)?如果我不使用,PC会慢吗? (滞后,阿帕奇停止等)。有区别吗?

1 个答案:

答案 0 :(得分:2)

sleep - 任何持续时间,甚至是“0秒” - 是让操作系统scheduler“暂停”当前任务并允许其他任务的快速方法继续工作的过程。

此上下文切换可防止可见的“滞后”,因为其他进程有机会执行他们需要执行的操作。即使没有其他进程需要工作,睡眠仍会导致当前进程执行停止,直到重新调度。仅重新安排就可以大大防止CPU成为烤面包机,因为大大减少了工作过程的有效/相关时间。

没有睡眠(或其他阻塞IO任务),它就变成了“热繁忙的循环”;这个循环尽可能快地执行,即使进程最终是preempted而没有休眠,“繁忙循环”在重新调度之前会消耗更多的CPU资源。 (这也意味着经常睡觉时完成相同数量的工作需要更长的时间。)

因此:在有选择地在CPU绑定的应用程序中产生 时,睡眠可能是有利的;但与此同时,如果过于频繁或长时间调用,它可以降低可用的CPU /处理吞吐量。在循环中休眠对IO绑定应用程序的影响要小得多;在这种情况下,它的主要目的是在继续某项行动之前施加更长的延误。