正如我读到的那样,对于多进程应用程序,单个CPU一次只能处理一个任务,从而在两个进程之间切换上下文。在多线程应用程序中,单个CPU可以处理多个线程。我不明白这个。如果只有一个CPU,CPU一次只能处理一个线程吗?如果是,那么如果CPU一次可以处理一件事情,那么拥有多线程应用程序相对于多进程应用程序的优势在哪里?
TL; DR
单核上的多线程可以通过使用线程和指令级并行性来加快应用程序的速度。
如果单个CPU具有多个内核,它将在每个内核上运行一个进程。如果没有,它将需要在单核上的进程之间进行切换。
可以将多线程和多处理结合使用以获得更好的结果。
完整说明
在多处理系统包括多个完整的处理单元的情况下,多线程旨在通过使用线程级以及指令级并行性来提高单个内核的利用率。由于这两种技术是互补的,因此有时将它们结合在具有多个多线程CPU的系统中和具有多个多线程内核的CPU中。多线程| 维基百科
例子
单个CPU以这种方式处理多线程。
假设我们有两个进程A
,B
并且需要运行一组命令。在每个命令之后,线程需要结果。这是它们需要运行的线程和命令。
| # | Thread A | Thread B|
|---|----------|---------|
| 1 | 1 | 5 |
| 2 | 3 | 1 |
| 3 | Wait | 3 |
| 4 | 4 | 2 |
现在让我们看一下CPU如何执行这些操作(理论上)
CPU从线程开始 A
CPU Pipeline
x x x x x x (1)
1 x x x x x (2) # Thread A, command 1 (1)
5 1 x x x x (3) # Thread B, command 1 (5)
3 5 1 x x x (4) # Thread A, command 2 (3)
1 3 5 1 x x (5) # Thread B, command 2 (1)
3 1 3 5 1 x (6) # Thread B, command 3 (3)... A is waiting for result of command 2
2 3 1 3 5 1 (7) # Thread B, command 4 (2)
x 2 3 1 3 5 (8)
x x 2 3 1 3 (9)
x x x 2 3 1 (10)
4 x x x 2 3 (11) # Thread A, command 4... A now has the result and can continue.
x 4 x x x 2 (12)
x x 4 x x x (13)
x x x 4 x x (14)
x x x x 4 x (15)
x x x x x 4 (16)
x x x x x x (17)
这就是没有多线程的外观。
CPU Pipeline
x x x x x x (1)
1 x x x x x (2) # Thread A, command 1 (1)
3 1 x x x x (3) # Thread A, command 2 (3)... A is waiting for result of command 2
x 3 1 x x x (4)
x x 3 1 x x (5)
x x x 3 1 x (6)
x x x x 3 1 (7)
x x x x x 3 (8)
4 x x x x x (9) # Thread A, command 4 (4)... A now has the result and can continue
x 4 x x x x (10)
x x 4 x x x (11)
x x x 4 x x (12)
x x x x 4 x (13)
x x x x x 4 (14)
5 x x x x x (15) # Thread B, command 1 (5)
1 5 x x x x (16) # Thread B, command 2 (1)
3 1 5 x x x (17) # Thread B, command 3 (3)
2 3 1 5 x x (18) # Thread B, command 4 (2)
x 2 3 1 5 x (19)
x x 2 3 1 5 (20)
x x x 2 3 1 (21)
x x x x 2 3 (22)
x x x x x 2 (23)
x x x x x x (24)
因此,在使用多线程的情况下,线程将在17
时间步长之后完成,而无需花费时间24
。
问题?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句