关于多线程和超线程的疑问

关于多线程和超线程的疑问

今天我试图了解多线程和超线程是什么。但我对此有几个疑问。

  1. 在多线程中,当两个线程同时尝试修改同一位置时会发生什么?

  2. 线程完全是操作系统概念,CPU 对此一无所知吗?它将它们视为进程?

超线程允许操作系统看到每个物理核心的两倍逻辑核心数量。

  1. 这是否意味着每个物理核心同时执行两个进程?还是意味着同时执行两个线程?

所以基本上,在超线程的情况下,我对进程和线程感到困惑。此外,在多线程和超线程的情况下,当依赖线程和进程到达时会发生什么?

答案1

  1. 同时访问:这是一个极其 复杂的问题。在非常低的级别上,即访问单个内存位置时,硬件可能会通过阻止一个线程几个时钟周期来处理它。在更高的级别(程序员通常处理的级别)上,通常需要使用锁、信号量、消息队列、事务内存或其他机制来防止这种情况发生;或者使用精心设计的“无锁”算法以及原子原语。正确做到这一点是难的
  2. 或多或少。线程也可以被认为是共享虚拟地址空间的进程。因此,线程有时被称为“轻量级进程”。当然,将进程视为具有不同地址空间(和其他内核资源)的线程也同样有效。
  3. 超线程:现代 CPU 比内存(甚至是缓存内存)快得多,以至于它们大部分时间都在等待而不是实际处理。超标量处理器可以同时执行多条指令,但大多数代码的自相关性太强,无法真正利用这一点。超线程允许安排两个线程使用同一内核的资源,这样资源就可以得到充分利用。有时它比只使用两个内核效果更好,有时则不然。

相关内容