多线程和超线程有什么区别?

多线程和超线程有什么区别?

我听说过超线程和多线程这两个术语,但它们之间到底有什么区别?哪种英特尔处理器使用它们?

答案1

多线程指在操作系统中运行多个执行线程的一般任务。多线程更通俗地称为“多处理”,它可以包括多个系统进程(Windows 上的一个简单示例是,例如同时运行 Internet Explorer 和 Microsoft Word),或者它可以由一个具有多个线程在它之内。

多线程(或者我应该说多处理)是一种软件概念。实际上,任何图灵完备的 CPU 都可以执行多线程,即使计算机只有一个 CPU 核心,并且该核心不支持超线程。为了支持多处理,CPU 将交错执行不同的执行线程,先执行一个线程,然后执行另一个线程,再执行另一个线程,其中操作系统将可用时间划分为“片段”,并为每个线程提供大致相等的时间(时间不必相等,但通常这样做,除非进程请求更高的优先级)。

请注意,每当有更多软件尝试在任何给定时间执行的执行线程比可用的执行线程多硬件(同时)执行线程,那么这些软件线程将在可用内核之间“交错”。在“单处理器”(一个 CPU 内核,没有超线程)的情况下,如果您有多个软件线程,它们将总是交错执行。如果您拥有一个具有超线程的 4 核 CPU,则有 8 个“硬件线程”,这意味着 CPU 可以同时执行 8 个同时执行的线程,因此如果您有 8 个软件线程尝试运行,它们可以同时运行;但是如果您有 9 个软件线程,其中一个硬件线程必须交错一对线程(所选的确切线程对取决于操作系统的调度程序实现)。


而超线程则是指一种非常具体的硬件Intel 开发的技术,允许单个处理器核心更高效地交错执行多个线程。换句话说,具有超线程的 CPU 将提供比没有超线程但其他方面相同的 CPU 更高的性能,因为超线程 CPU 能够同时平衡给定核心上的两个(有时更多,但超线程通常是双向的)执行线程。

但是,超线程严格来说比完全独立的物理核心要慢,因为有些类型的操作可能会破坏超线程的性能优势,而使用完全独立的核心时,很少有操作会导致这种情况发生。

请看以下示例,其中假设“1 核”在所有示例中的表现完全相同:

示例 1:2 核,无超线程。
示例 2:4 核,无超线程。
示例 3:2 核,带超线程。
示例 4:4 核,带超线程。

在这种情况下,示例 4 始终是最快的。在极不适合利用超线程优化的工作负载上,示例 2 的速度有时可能与示例 4 一样快。

另一方面,在超线程最有利的工作负载下,示例 3 有时可能几乎与示例 2 一样快,即使它的物理核心数量只有示例 2 的一半。

当然,示例 1 是所有示例中最慢的,但在运行不适合超线程的工作负载时,它有时可能与示例 3 一样快。

在对现代英特尔 CPU 进行的实际基准测试中,我们通常会发现,与无超线程相比,超线程通常可带来 20% 到 40% 的性能提升(“无超线程”情况的基准测试是通过禁用 BIOS 中的超线程功能进行的)。偶尔在某些工作负载下,禁用超线程会降低性能优势,但这些工作负载在实际使用中可能很少见。但是,如果我可以在具有超线程的 4 核或 8 核之间进行选择,假设每个核本身具有相同的性能,我每次都会选择 8 核 CPU。

答案2

多线程是操作系统层面的并行处理术语。处理器与多线程无关。

超线程是英特尔的一个概念,它实现了在单个处理器核心中“同时”处理多个线程。虽然只有一个物理核心,但操作系统可以看到两个处理器核心。

相关内容