Dan*_*ith 12 cpu multithreading
正如我已经读到的那样,对于多进程应用程序,单个CPU一次只能处理一个任务,在两个进程之间切换上下文.在多线程应用程序中,单个CPU可以处理多个线程.我不明白.如果只有一个CPU,CPU是否一次处理一个线程?如果是,如果CPU可以一次处理一件事,那么多线程应用程序与多进程应用程序的优势在哪里.
Dan*_*ahn 18
TL; DR
单核上的多线程可以通过使用线程和指令级并行来加速应用程序.
如果单个CPU具有多个内核,则它将在每个内核上运行一个进程.如果没有,则需要在单核上的进程之间切换.
可以组合多线程和多处理以获得更好的结果.
完整解释
在多处理系统包括多个完整处理单元的情况下,多线程旨在通过使用线程级和指令级并行来提高单个核的利用率.由于这两种技术是互补的,因此有时将它们组合在具有多个多线程CPU的系统中以及具有多个多线程核心的CPU中.多线程| 维基百科
例
单个CPU以这种方式处理多线程.
比方说,我们有两个进程A和B它需要运行一组命令.在每个命令之后,线程需要结果.以下是运行所需的线程和命令.
| # | Thread A | Thread B|
|---|----------|---------|
| 1 | 1 | 5 |
| 2 | 3 | 1 |
| 3 | Wait | 3 |
| 4 | 4 | 2 |
Run Code Online (Sandbox Code Playgroud)
现在让我们看一下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)
Run Code Online (Sandbox Code Playgroud)
这就是没有多线程的情况.
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)
Run Code Online (Sandbox Code Playgroud)
因此,对于多线程,线程将在17时间步之后完成,而不需要它24.
有问题吗?
| 归档时间: |
|
| 查看次数: |
10853 次 |
| 最近记录: |