当前位置: 技术问答>linux和unix
50分,超简单cpu问题!
来源: 互联网 发布时间:2016-07-17
本文导语: 请问诸位怎样才能将cpu占用到100%? 死循环可以么? 这个问题好像是可以,但是什么样的死循环才会占用100%? for(;;) { } 可以吧? 那 while(1) { fetch cursor的数据库操作。 }这个占用cpu很少,为什么? ...
请问诸位怎样才能将cpu占用到100%?
死循环可以么?
这个问题好像是可以,但是什么样的死循环才会占用100%?
for(;;)
{
}
可以吧?
那
while(1)
{
fetch cursor的数据库操作。
}这个占用cpu很少,为什么?
死循环可以么?
这个问题好像是可以,但是什么样的死循环才会占用100%?
for(;;)
{
}
可以吧?
那
while(1)
{
fetch cursor的数据库操作。
}这个占用cpu很少,为什么?
|
以前有个很经典的讨论贴啊。
你可以不停的fork,或者用管道。
你可以不停的fork,或者用管道。
|
while(1)
{
fetch cursor的数据库操作。
}这个占用cpu很少,为什么?
因为fetch中可能有异步调用,异步调用给了操作系统释放线程的机会。
而while(1);就是不给操作系统任何得以释放线程的机会。因此占用CPU比上面的反而高。
同意1楼的,什么样的死循环也不会真正的100%占用CPU。除非该操作系统是“非抢占”,就是一个进程运行,另外的进程无法抢过来CPU资源,只有部分实时操作系统采用这种模式。
而linux、windows都都是“分时调用”,把CPU的资源分成很多时间片。每个时间片内,同优先级的进程具有相同调度机会。
{
fetch cursor的数据库操作。
}这个占用cpu很少,为什么?
因为fetch中可能有异步调用,异步调用给了操作系统释放线程的机会。
而while(1);就是不给操作系统任何得以释放线程的机会。因此占用CPU比上面的反而高。
同意1楼的,什么样的死循环也不会真正的100%占用CPU。除非该操作系统是“非抢占”,就是一个进程运行,另外的进程无法抢过来CPU资源,只有部分实时操作系统采用这种模式。
而linux、windows都都是“分时调用”,把CPU的资源分成很多时间片。每个时间片内,同优先级的进程具有相同调度机会。
|
第二个不行,是因为fetch里伴随了IO操作,在IO的时间你的CPU是没有运行的.
|
for(;;)
{
}
可以吧?
那
while(1)
{
fetch cursor的数据库操作。
}这个占用cpu很少,为什么?
第一个 可能会,但是再循环体内加上io操作内存占用里就很快下来了
第二个 使用游标是输入输出的指令,这种指不会占用cpu时间,
{
}
可以吧?
那
while(1)
{
fetch cursor的数据库操作。
}这个占用cpu很少,为什么?
第一个 可能会,但是再循环体内加上io操作内存占用里就很快下来了
第二个 使用游标是输入输出的指令,这种指不会占用cpu时间,