加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

多线程 – 是否有可能在多个CPU核心上同时执行单线程程序?

发布时间:2020-12-14 23:48:42 所属栏目:Java 来源:网络整理
导读:当我运行我在四核Intel上编写的单线程程序时,我可以在 Windows任务管理器中看到,我CPU的所有四个内核实际上都或多或少都处于活动状态.一个核心比其他核心更活跃,但也有活动.没有其他程序(当然除了OS内核)运行,这对于该活动来说是合理的.当我关闭我的程序所有
当我运行我在四核Intel上编写的单线程程序时,我可以在 Windows任务管理器中看到,我CPU的所有四个内核实际上都或多或少都处于活动状态.一个核心比其他核心更活跃,但也有活动.没有其他程序(当然除了OS内核)运行,这对于该活动来说是合理的.当我关闭我的程序所有活动时,所有核心都下降到接近零.剩下的就是核心上的一点“噪音”,所以我很确定所有可见的活动直接或间接地来自我的程序(如调用系统例程).

操作系统或内核本身是否可能尝试在所有四个内核上平衡某些代码或执行,即使它不是多线程程序?你有任何记录这种技术的链接吗?

该程序的一些信息:它是一个用Qt编写的控制台应用程序,任务管理器声明只有一个线程正在运行.也许Qt使用线程,但我不使用信号或插槽,也不使用任何GUI.

链接到任务管理器屏幕截图:http://img97.imageshack.us/img97/6403/taskmanager.png

这个问题与语言无关,与Qt / C无关,我只想知道Windows或Intel是否还要在所有内核上平衡单线程代码.如果他们这样做,这项技术如何运作?

我能想到的是,在所有内核上都安排了从磁盘读取等内核例程,但这不会显着提高性能,因为代码仍然需要与内核api调用同步运行.

编辑

您是否知道任何工具可以比较差的Windows任务管理器更好地分析单线程和/或多线程程序?

解决方法

单线程进程只能在任何给定时刻在单个核心上运行.

但是操作系统可以将一个线程从一个核心迁移到另一个核心.虽然操作系统会尝试将线程保持在同一个内核上,但如果线程运行的最后一个内核忙,而另一个内核是空闲的,则操作系统可以迁移该线程.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读