multithreading - 多线程依赖于机器的架构吗?

标签 multithreading cpu multicore processors

我最近一直在阅读关于 system architecturemulti-threading的话题尚未详细介绍最新的技术改进。我做了我的部分搜索,但找不到以下问题的答案:

问题是

1) 是 multi-threading依赖于 system architecuture (CPU) .做所有 CPU (single core)支持 multi-threading ?如果没有,multi-threaded 会发生什么?在这些机器上运行的应用程序

引用 here

Intel CPUs support multithreading, but only two threads per CPU.
AMD CPUs do not support multithreading and AMD often sites Microsoft's 
recommendations to turn off Hyperthreading on Intel CPUs when running applications 
like peoplesoft and Exchange.

2) 那么它只说 two threads per CPU 是什么意思?这里。在任何给定时间,CPU (single core)只能处理 thread .和另一个 thread等待处理正确吗?

3) 它与生成的应用程序有什么不同,比如 10 threads并等待他们被处决。如果CPU最多只能处理two threads , 程序员在写 multi-threaded applications 时不应该考虑这个事实.

即使与 multi-core processors (say quad-core)最多 8 threads can be queued ,但只有 4 threads可以同时处理。

P.S:我读了一点关于 hyper-threading但我不确定这在这里是否相关以及是否
所有处理器都支持 hyper-threading

最佳答案

1)它更依赖于操作系统。即使对于单核架构,也可以支持多线程,但线程不是并行执行的——操作系统将在它们之间进行上下文切换。

2) Intel 通常支持双路硬件线程(也称为同时多线程),其中每个线程分配一个管道。因此,如果您有一个具有两个线程的进程,它们可以同时在同一个内核上执行。

3)参见1。基本上操作系统将在它计划在它无法分配的线程之间进行上下文切换之前将尽可能多的线程分配给硬件。此过程取决于操作系统的调度程序,您可以阅读有关 Linux 的调度程序以了解正在发生的事情。

编辑:Hypethreading 基本上是我提到的硬件线程功能。

关于multithreading - 多线程依赖于机器的架构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21170539/

相关文章:

java - JBullet NullPointer 在单独线程中进行步骤模拟

multithreading - 在Perl中使用多线程时,应如何更新哈希哈希?

java - Thread.interrupt 上的 IllegalThreadStateException

c - 通过 C 将线程固定到 cpuset 中的核心

multithreading - 线程(在 Java 或 C++ 程序中)与 CPU 中的内核数之间有什么关系?

multicore - 如何将进程绑定(bind)到 freebsd/linux 中的特定内核

Java并行编程

c - 如何在 OS X 上编译 OpenMP 和 MPI 混合 C 程序

Python multiprocessing.cpu_count() 在 4 核 Nvidia Jetson TK1 上返回 '1'

c# - 最好使用多线程? (线程池或线程)