4

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

有的问题是

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

这里引用的是

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同时处理。

PS:我读了一些关于hyper-threading但我不确定这是否相关以及是否所有处理器都支持hyper-threading

4

2 回答 2

2

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

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

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

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

于 2014-01-16T19:05:35.480 回答
1

在您的问题中,CPU 意味着核心。

1)确实如此。我相信 ARM 上的内存访问是用文字进行的,所以写入 char 不是原子的而且内存排序也不同现代操作系统(除了 DOS 之外的任何东西)支持上下文切换:一个线程执行时,其他线程等待。所有 Windows 进程中的线程总数约为 1000。常见的时间量(加载 CPU 的时间)为 1-10 毫秒。一核多线程不会提高计算能力,但允许异步任务。例如,GUI 在网络活动期间不会冻结。一个线程等待网络,另一个线程响应用户活动。

2) 是的

3) 通常的做法是产生等于(虚拟)内核数的线程数,即 AMD 系统中的内核数和 Intel 的两倍。仅适用于计算线程。Web 服务器线程通常等待网络并且不会大量加载 CPU,因此最好生成数千个线程。

超线程对于等待 RAM 的任务来说很酷。当一个线程等待数据时,另一个线程执行。对于数学,它通常不会提高性能。它适用于处理不适合缓存的数据:不适合缓存的列表、树、哈希表。

于 2014-01-17T15:57:38.887 回答