当我运行我写在四核英特尔上的单线程程序时,我可以在Windows任务管理器中看到,实际上,我的CPU的所有四个内核都或多或少处于活动状态。一个核心比其他三个核心更加活跃,但也有一些核心活动。没有其他程序(当然在操作系统内核旁边)运行,这对于这个活动来说似乎是合理的。当我关闭程序时,所有内核都会下降到几乎为零。所有剩下的内核都有点“噪音”,所以我很确定所有可见的活动都直接或间接地来自我的程序(如调用系统例程)。是否有可能在一个以上的CPU内核上同时执行单线程程序?
有没有可能是操作系统或内核本身尽量平衡所有4个内核的一些代码或执行,即使它不是一个多线程程序?你有没有任何文件记录这种技术的链接?
一些相关信息的方案:这是写在Qt的控制台应用程序,任务管理器指出,只有一个线程在运行。也许Qt使用线程,但我不使用信号或插槽,也不使用任何GUI。
链接到任务管理器截图:http://img97.imageshack.us/img97/6403/taskmanager.png
这个问题是语言无关的,不依赖于Qt的/ C++,我只是想知道,如果Windows或英特尔做的也来平衡所有核心单线程代码。如果他们这样做,这种技术如何工作?
所有我能想到的是,那个内核例程像从磁盘读取等计划上的所有核心,但是这不会显著提高性能,因为该代码仍然运行同步到内核API调用。
编辑
你知道任何工具做比穷人Windows任务管理器单和/或多线程程序的更好的分析?
当然,除非你使用量子处理器,否则你只能有一个处理器在给定的时间点运行某个线程。但是,在一段时间内,单个线程可以迁移到其他CPU! – ennuikiller 2010-01-05 19:35:00
较旧版本的Windows(XP及更早版本)不要试图在同一个内核上保留一个进程,它们默认情况下完全相反。 – 2010-01-05 19:50:37
操作系统调度程序可能会将一个进程(更精确地说,一个线程)从一个核心迁移到另一个核心,但这是不太可能的。我不知道Qt,但在我看来,更可能的解释是Qt背后还有其他线程,在其他内核上进行调度。该活动以及内核和其他进程的活动显示在其他内核上。 – Cheeso 2010-01-05 19:54:37