【发布时间】:2018-04-26 08:30:52
【问题描述】:
在编程多线程环境方面,当我们运行多线程应用程序时,CPU 在线程之间切换。我们可以并行创建和运行数千个线程。
我不明白为什么我们在单个 CPU 上有一个核心/线程限制,它在实际情况下不能并行运行,而是它只是在要运行的线程之间快速切换,那么为什么我们有一个类似 8 核/16 线程的 CPU ?
【问题讨论】:
-
16 线程“限制”是 CPU 上的并发 线程数。对系统可以拥有的线程数量没有限制,只有在 CPU 上可以同时执行多少。
-
@Someprogrammerdude 这就是我认为的问题。一些答案说 16 个线程实际上并没有同时工作。 “CPU只是在线程之间切换。要同时执行,你需要多CPU”
-
@hellzone 您是否将 CPU 线程与编程/软件多线程混为一谈?
-
这就是自 1960 年代开始以来多任务处理的实际工作方式:多个执行“线程”由操作系统切换进出。当时和今天的最大区别在于,这种切换可以通过更高的处理器速度更频繁地完成,并且多核(以及可能的“技巧”,如超线程)意味着多个线程可以同时运行。昨天的“多 CPU”系统与今天的多核 CPU 之间的区别在于,不同的物理 CPU 已合并到一个包中。
-
@hellzone 如果您在 16 个软件线程中运行它,那么您可以同时运行它们。但是,CPU 线程与其所属的内核共享许多物理特性,因此在许多情况下,您会发现它比拥有 16 个实际内核或 16 个单核 CPU 慢。 (请注意,一个核心通常只有 2 个线程。)。有一个限制,因为这些是物理实体 - 将它们想象成更像单车道或多车道的道路。
标签: java multithreading cpu cpu-cores