CPU线程、内核线程、操作系统线程、用户线程的区别

Sac*_*rma 6 java parallel-processing concurrency multithreading multitasking

我已经阅读了很多关于并行性与并发性有何不同的文章,但我有很多问题,例如如何使用 Java 等编程语言实现并行性?

到目前为止,我所理解的是使用像 Java 这样的 VM 我们只能实现并发性,而并行性不在 JVM 的范围内,它的线程映射到(我在这里很困惑)操作系统线程或内核线程?

要了解多线程,需要了解 VM (JVM) 或进程的线程实际上是如何映射到 CPU 硬件的。请在这里帮忙。

如果我错了,请纠正我,以下是我认为我理解正确的几件事:

1. CPU 线程(英特尔超线程):通过在具有相同 ALU 的 CPU 中添加更多寄存器来提供硬件线程,因此实际上并不表现为双 CPU(如果 CPU 中有 2 个线程)和“只是”并发使用 ALU 可以掩盖(通过交错 MUXing 隐藏)主要无法提供真正的并行代码执行。

2. 内核线程:由内核启动,这些线程的数量可能比 CPU 线程多,但启动起来有点贵。

3. 操作系统线程:我不明白。我猜这就是您在调用本机线程时的意思,并且可能与之前的 #2(即内核线程)相同。

4. 用户线程:就像new Thread()在 JVM 或 .NET 中一样。我认为它们不被操作系统识别为线程,所以从并行性的角度来看,这里没有什么可以做的。

我需要了解 #4 中创建的线程如何映射到 #1,可能是 Windows/Linux/MacOS 的示例。

伙计们,我了解这个问题的范围有多大,但我可以接受简要信息并链接到任何详细文档。提前致谢。

Shu*_*Pal 5

1. Intel Hyperthreading - 它是由 Intel 开发的一种提高单核效率的技术,因为在它的很多执行时间内,CPU 都在等待从 RAM 中检索数据和代码。操作系统将超线程核心视为两个独立的逻辑处理器,每个都包含独立的寄存器。

2. 内核线程 -这由操作系统内核管理并且仅在内核模式下调度。它们与一些属性一起附加到寄存器和 EIP。这些是由进程通过使用内核的一些“定义”接口来创建和管理的。

3. 用户线程- 这些由用户空间进程创建,在内核线程上执行(因为只能调度内核线程)。但是多个用户线程可以轮流在内核线程上执行,并且由于不执行系统调用节省了时间,因此可以为来来往往的“临时”线程提供更高的性能。

4. 操作系统线程- 据我所知,操作系统线程没有正确的定义。它们可以是操作系统使用的线程,也可以只是内核线程。

用户线程在内核线程上执行的模型有多种——一对一、多对多和多对一,你可以在谷歌上搜索这些。