Concurrency vs Parallelism

Concurrency vs Parallelism

当我们谈论计算机科学和互联网技术时,经常会遇到并发(concurrency)和并行(parallelism)这两个词。它们听起来相似,但实际上又有一些重要的区别。

并发 Concurrency

是指两个或多个事件在同一时间间隔内发生
CPU 交替执行多个程序,由于切换速度很快,以人类的感觉来看是同时执行的;但在微观层面,在同一时刻只能有一条指令执行处理器分时复用,多线程交织执行;在特定某个时刻,某一个线程以排他方式独占 CPU 资源,而在不同时刻,不同的线程占用 CPU 运行,从而实现在一段时间内同时执行多个线程的表象。

并行 Parallelism

通常一个 CPU 内核在一个时间片只能执行一个线程(某些 CPU 采用超线程技术,物理核心数和逻辑核心数形成一个 1:2 的关系,比如 4 核 CPU,逻辑处理器会有 8 个,可以同时跑 8 个线程),如果 N 个内核同时执行 N 个线程,就叫做并行(parallel)

是指两个或多个事件在同一时刻发生

同一时刻内,无论从微观还是宏观层面来看,有多条指令在多个处理器上是同时执行的

总结 Conclusion

多 CPU 指的是在一套系统中拥有多颗 CPU,常见于服务器、工作站或计算中心,可以提供庞大的算力。

多核是指在一枚处理器(processor)中集成两个或多个完整的计算引擎。

Thread Concurrency Thread Parallelism Process Concurrency Process Parallelism
多 CPU ✔️ ✔️ ✔️ ✔️
多核 CPU ✔️ ✔️ ✔️
单核 CPU ✔️ ✔️

操作系统会拆分 CPU 为一段段时间的运行片,轮流分配给不同的程序。对于多 cpu,多个进程可以并行在多个 cpu 中计算,当然也会存在进程切换;对于单 cpu,多个进程在这个单 cpu 中是并发运行,根据时间片读取上下文+执行程序+保存上下文。同一个进程同一时间段只能在一个 cpu 中运行,如果进程数小于 cpu 数,那么未使用的 cpu 将会空闲。

进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此 CPU 切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

对于多核 cpu,进程中的多线程并行执行,执行过程中存在线程切换,线程切换开销较小。对于单核 cpu,多个线程在 cpu 中并发执行,根据时间片切换线程。同一个线程同一时间段只能在一个 cpu 内核中运行,如果线程数小于 cpu 内核数,那么将有多余的内核空闲。

Ref

https://www.jianshu.com/p/cbf9588b2afb
https://zhuanlan.zhihu.com/p/383279972
https://blog.csdn.net/weixin_45163798/article/details/104596138

Author

Efterklang

Posted on

2024-03-10

Updated on

2024-09-18

Licensed under

Comments