Performance 应用程序未使用100%的CPU

Performance 应用程序未使用100%的CPU,performance,profiling,theory,cpu-usage,Performance,Profiling,Theory,Cpu Usage,当我在一台机器上运行我编写的应用程序时,Windows 7 Professional 32位SP 1运行得很好,并且使用了系统中100%的CPU 但是,当我在WindowsServer2008上运行相同的应用程序时,我没有看到100%的CPU使用率 为什么它不使用100%的CPU,我如何才能使它这样做?好吧,通常你不想使用100%的CPU,因为你想在负载增加时留下自己的空间。通常一个程序不会一直使用CPU,因为它会开始受到其他因素的限制,通常是I/O 以一个GUI应用程序为例,在用户单击某个东西

当我在一台机器上运行我编写的应用程序时,Windows 7 Professional 32位SP 1运行得很好,并且使用了系统中100%的CPU

但是,当我在WindowsServer2008上运行相同的应用程序时,我没有看到100%的CPU使用率


为什么它不使用100%的CPU,我如何才能使它这样做?

好吧,通常你不想使用100%的CPU,因为你想在负载增加时留下自己的空间。通常一个程序不会一直使用CPU,因为它会开始受到其他因素的限制,通常是I/O

以一个GUI应用程序为例,在用户单击某个东西之前,它什么也不做,然后一直等待用户输入

你可能会愚蠢地把它写成

while(true){
  if(there is user input){
    use the user input
  }
}
这会烧掉CPU,因为它会非常快地运行这个循环。因此,精明的购物者可能会意识到,用户可以应对点击和响应之间长达50毫秒的延迟。所以再加上一些睡眠,比如

while(true){
  if(there is user input){
    use the user input
  }
  sleep for 50 ms
}
给CPU一个做其他事情的机会是很重要的,因为它们对你很重要,否则你的程序就像一个胖子,他只是把头伸到冰淇淋机下面,从不让别人吃美味的冰淇淋

编辑

我爱我是一个比喻,所以这里有一个比喻给你

把CPU的使用想象成道路,把程序想象成汽车,如果道路都畅通,那么你的汽车燃烧橡胶并以最快的速度在街上行驶是相对安全的。汽车越多,它们就越需要彼此让步,让我们等待人们关掉或打开

如果你想将你的道路(CPU)专用于赛车(游戏)之类的东西,你会倾向于删除行人和非赛车(其他程序)之类的东西,这样你就可以更安全地以尽可能快的速度行驶


现在,我从没说过我擅长隐喻。记住安全驾驶,享受冰淇淋

通常情况下,您不希望使用100%的CPU,因为当您增加负载时,您希望为自己留出空间。通常一个程序不会一直使用CPU,因为它会开始受到其他因素的限制,通常是I/O

以一个GUI应用程序为例,在用户单击某个东西之前,它什么也不做,然后一直等待用户输入

你可能会愚蠢地把它写成

while(true){
  if(there is user input){
    use the user input
  }
}
这会烧掉CPU,因为它会非常快地运行这个循环。因此,精明的购物者可能会意识到,用户可以应对点击和响应之间长达50毫秒的延迟。所以再加上一些睡眠,比如

while(true){
  if(there is user input){
    use the user input
  }
  sleep for 50 ms
}
给CPU一个做其他事情的机会是很重要的,因为它们对你很重要,否则你的程序就像一个胖子,他只是把头伸到冰淇淋机下面,从不让别人吃美味的冰淇淋

编辑

我爱我是一个比喻,所以这里有一个比喻给你

把CPU的使用想象成道路,把程序想象成汽车,如果道路都畅通,那么你的汽车燃烧橡胶并以最快的速度在街上行驶是相对安全的。汽车越多,它们就越需要彼此让步,让我们等待人们关掉或打开

如果你想将你的道路(CPU)专用于赛车(游戏)之类的东西,你会倾向于删除行人和非赛车(其他程序)之类的东西,这样你就可以更安全地以尽可能快的速度行驶


现在,我从没说过我擅长隐喻。记住安全驾驶,享受冰淇淋

程序使用的CPU百分比与它的效率无关

它与CPU有着千丝万缕的联系,只是有时感觉像在做其他事情


如果事实上,如果您的程序执行任何I/O操作,CPU百分比将下降,因为当您的程序等待时,它没有运行。

程序使用的CPU百分比与它的效率无关

它与CPU有着千丝万缕的联系,只是有时感觉像在做其他事情


如果事实上,如果您的程序执行任何I/O操作,CPU百分比将下降,因为当您的程序等待时,它没有运行。

thanx 4 ur响应。基本上我的问题是,当一个exe在一个系统(Windows 7)中使用100%CPU时,为什么它在另一个系统(Windows Server 2008)中不使用相同的CPU;给定相同的一组输入???@user1534113:他在第一句话中给出了答案,程序可以在一个平台上受到CPU的限制,也可以在另一个平台上受到I/O或同步的限制。一般来说,I/O限制可以是任何东西,从总线带宽上的HDD/RAM速度到内核调用开销。基本上我的问题是,当一个exe在一个系统(Windows 7)中使用100%CPU时,为什么它在另一个系统(Windows Server 2008)中不使用相同的CPU;给定相同的一组输入???@user1534113:他在第一句话中给出了答案,程序可以在一个平台上受到CPU的限制,也可以在另一个平台上受到I/O或同步的限制。一般来说,I/O限制可以是从总线带宽上的HDD/RAM速度到内核调用开销的任何限制。Thanx 4编辑了许多回答,这些回答标志着我问题的答案。@Cylian想详细说明您回滚的原因吗?这个问题目前让这个问题听起来非常具体,我对它进行了编辑,使它更通用。你的应用程序是多线程的还是这两台机器之间的内核数量有差异?@IvoTops我的应用程序不是多线程的。两个磁芯的数量之间存在差异。在我的系统(Windows 7 Professional 32位SP 1)上有8个内核,在另一个系统(Windows Server 2008)上有24个内核cores@Cylian想详细说明你为什么要退后吗?这个问题目前正使这个问题成为可能