gpt4 book ai didi

java - CPU线程、内核线程、操作系统线程、用户线程之间的区别

转载 作者:行者123 更新时间:2023-11-30 10:24:15 25 4
gpt4 key购买 nike

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

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

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

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

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

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

<强>3。操作系统线程:我不明白。我猜这就是你调用 native 线程时的意思,可能与之前的 #2 即内核线程相同。

<强>4。用户线程:就像JVM 或.NET 中的new Thread()。我认为它们不被操作系统识别为线程,因此从并行性的角度来看,这里无能为力。

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

伙计们,我知道这个问题有多广泛,但我可以接受简短的信息和任何详细文档的链接。提前致谢。

最佳答案

<强>1。 Intel Hyperthreading - 这是一项由 Intel 开发的技术,用于提高一个内核的效率,因为在其大部分执行时间中,CPU 等待从 RAM 中检索数据和代码。操作系统将超线程核心视为两个逻辑处理器,每个处理器都包含独立的寄存器。

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

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

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

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

关于java - CPU线程、内核线程、操作系统线程、用户线程之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46619223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com