我已经在win32,c,c ++上工作了一段时间。我在visual studio上编码。大多数时候,我看到系统空闲进程使用更多的CPU利用率。有没有办法为我的程序分配更多处理器周期以更快地运行它?我知道i / o可能存在局限性,在这些情况下这个问题没有任何意义。 要么 我误解了任务经理的号码吗?我很困惑,请帮帮我。 而且我想在程序本身做一些事情,顺便说一句,如果答案是针对Windows的,我会很高兴。
提前致谢 〜卡尔文
答案 0 :(得分:5)
如果您的程序是唯一有事可做的程序(不等待IO),则其线程将始终分配给处理器核心。
但是,如果您有一个多核处理器和一个单线程程序,那么任务管理器中显示的进程的CPU使用率将始终受到100 / Ncores的限制。
例如,如果你有一台四核机器,你的过程将是25%(使用一个核心),空闲过程大约是75%。您可以通过将任务划分为可由单独线程处理的块来获得额外的CPU功率,然后这些线程将在空闲核心上运行。
答案 1 :(得分:2)
空闲进程仅在没有其他进程需要时“运行”。如果要使用更多CPU周期,请使用它们。
答案 2 :(得分:1)
如果您的程序处于空闲状态,则它不会执行任何操作,即没有任何事情可以更快地完成。所以CPU在你的情况下可能不是瓶颈。 您是否在等待来自磁盘或网络的数据?
如果您的处理器有多个内核,并且您的程序只使用一个内核,那么使您的程序多线程可以正常工作。
答案 3 :(得分:1)
在多任务/多线程操作系统中,处理器的时间在线程之间分配
如果你想让一个特定的线程获得更大的时间块,你可以使用SetThreadPriority函数设置它的优先级,但这并不明智。
只有特殊软件(应该)搞乱这些设置。
窗口应用程序通常具有较低的CPU使用百分比(我们在任务管理器中看到)
因为大多数时候他们只是等待消息。
答案 4 :(得分:1)
使用线程:
同样,从主线程中删除所有睡眠等待状态。
将所有I / O推迟到一个线程,以便将等待状态限制在其中。将实际计算保留在前台线程中,并使用同步机制使I / O从属线程在通信时等待主线程。
如果您的CPU是多核的,并且您的问题可以兼容,请创建与核心一样多的线程,研究“set affinity”函数以在核心之间分配它们,并为所有I / O保留单独的线程。
另外注意不要在你的主线程中等待 - usleep(1)不会让你进入背景1微秒,但对于“不低于......”这可能意味着1毫秒到100毫秒之间的任何东西,但几乎没有永远不会那样,也绝不会接近微秒。