这是我在计算机技术课程中一次旧的考试:
对还是错?硬件多线程导致并发而不是并行。
根据答案,答案是“正确”。
但是,我很困惑为什么。课程对并行性的定义如下:
“并行性是指同时做(执行)许多事情。并行性可以从硬件的角度来看待。”
(没有给出更详细的解释)。
我可能对硬件多线程的工作原理或并行性的定义感到困惑。我以为硬件多线程是通过使用多发射处理器实现的,主要是因为这张幻灯片 :
这是否意味着来自同一线程(以及多线程中来自不同线程)的多条指令可以同时运行,从而导致同时执行不同的事情?
我认为你需要回去阅读课程笔记,而不是考试题,因为笔记会提供背景和含义。
通常,并行是指指令级并行,而并发是指并发进程或线程,而不是指令。
这意味着,如果只有“并行”和“并发”这两个词,那么它们就会失去很大一部分含义,因为这些词的字典定义在含义上有一些粗略的相似性。
现代处理器核心确实具有大量指令级并行性,因为它们被设计为超标量无序执行引擎。它们在核心内有多个执行单元,还有一个调度程序,可以确定数据依赖性,因此如果这些指令不依赖于彼此的结果,则可以同时执行多个指令。例如,如果您有一条指令将值 A 和 B 相加,另一条指令将值 C 和 D 相加,那么这些指令可以并行执行。
但这不会改变向CPU 核心提供指令流的线程或进程所看到的内容。当线程看到执行的指令时,它们实际上已被重新排列回其原始顺序。就核心外的线程而言,指令流的输入和输出是相同的。所有并行性都发生在“后台”。
但是,处理器上的多个线程不允许您将单个进程分解为多个并行指令流,除非程序员完成工作。
多线程允许您同时(即同时)运行两个指令流。它不允许处理器随意将一个程序线程拆分为两个单独的流,这是核心内的并行性所为,因为它比线程拥有更多关于当前和即将到来的状态信息的即时信息。
程序员可以将自己的程序分成单独的线程,这再次使他们能够更好地利用并发,但这要求他们知道可以将哪些工作分成每个并发线程并采取相应的行动。