<?php
while(1){
do something...
}上面这段代码会让服务器崩溃<?php
while(1){
do something...
usleep( 100000);
}这样就不会了这是什么道理呢?
还有usleep这个值设为1行不行?
while(1){
do something...
}上面这段代码会让服务器崩溃<?php
while(1){
do something...
usleep( 100000);
}这样就不会了这是什么道理呢?
还有usleep这个值设为1行不行?
以人来比喻,
第一段代码的意思就是让一个人不停的跑,早晚会跑死的.
第二段代码的意思就是让一个人跑一会停一会,所以一直跑下去没有任何问题.
usleep参数是microseconds, 1000000ms = 1s,所以你改成1和第一段代码基本上没有区别了.
现代OS一般都是可抢占的,执行php死循环程序时,可以被抢占OS调度器,如果发现有处于TASK_RUNNING却没有得到时间片的进程,会等php时间片用完时,强制将其
剥离CPU,并且调整动态优先级,放入到相应运行队列,然后取一个其它的等待时间片的进程,放入到CPU。时钟中断会让OS定时执行调度工作的,不管用户进程是否愿意,都不得的下来。
这个时钟中断的周期,跟HZ有关,所以编译内核时,调整HZ也是门学问,
大时间片有更大吞吐量,但是响应时间却更长了,小时间片响应很快,但是吞吐量下去了。用户态程序无论怎么死循环,都搞不掉系统。