并发和并行,到底差在哪?
关键区别是多个任务是在轮流切换,还是真正同时执行。
并发:任务交替推进
并发通常指一个 CPU 在多个任务间快速切换,同一时刻常只执行一个任务,但多个任务都在推进。
并行:任务真正同时执行
并行指多个任务在同一时刻一起运行,通常依赖多个 CPU 或多个核心。
一句话记住核心区别
并发是逻辑上的同时执行,重点在调度和切换;并行是物理上的同时执行,重点在硬件是否支持同时运行。
Python 里常见的三种并发模型
多进程:适合 CPU 密集型
进程彼此独立、隔离性强,能更好利用多核,但更重,内存占用和创建、切换成本更高。大量计算、图像处理、数据转换通常优先考虑多进程。
多线程:适合常见 IO 密集型
线程共享进程资源,创建成本通常低于进程,适合网络请求、文件读写等 IO 密集型任务。缺点是共享数据带来同步、互斥和锁的问题。
多协程:适合高并发 IO
协程通常运行在一个线程内,切换由程序控制,开销更轻,适合大量网络连接、批量接口请求、异步文件处理。Python 中常见实现是 asyncio,但代码组织和异常处理会更复杂。
怎么选:先看任务是 CPU 密集还是 IO 密集
选型先看瓶颈:
- CPU 密集型:优先多进程,更容易利用多个 CPU 或核心。
- IO 密集型:优先多线程或多协程,能在等待期间切换去做别的事。
再看取舍:重隔离和多核利用选多进程;低成本处理常见 IO 选多线程;高并发 IO 且接受更高实现复杂度选多协程。
总结
并发解决多个任务如何交替推进,并行解决多个任务能否真正同时执行;多进程、多线程、多协程是不同实现手段。Python 里做选型时,先判断任务是 CPU 密集型还是 IO 密集型,再看资源成本和开发复杂度。










