📌 专栏:Python高阶进阶全套教程
🔥 阅读收获:彻底搞懂并发核心四大概念:同步/异步、阻塞/非阻塞、多线程、协程,区分适用场景、看懂底层区别、写出高效并发代码,面试不再卡壳。
💡 适合:期末作业、面试八股、后端进阶、爬虫提速、IO优化
一、先搞懂四个基础核心概念(重中之重)
很多人学不会并发,是因为分不清这两组概念:
同步 / 异步 :任务的提交方式(怎么发起任务)
阻塞 / 非阻塞 :程序的等待状态(任务卡住不卡住)
1.1 同步(Sync)
顺序执行,做完一个再做下一个。
发起任务后,程序必须等待任务完成,才能执行下一行代码。
优点:逻辑简单、不乱、无数据冲突
缺点:效率极低,IO等待全程干等
1.2 异步(Async)
发起任务不等待,直接继续往下执行。
任务交给后台执行,主线程继续干活,任务完成后回调/返回结果。
优点:极高效率,充分利用等待时间
缺点:逻辑复杂、需要处理回调、异步锁
1.3 阻塞(Block)
遇到IO操作(网络、文件、睡眠),程序卡住、放弃CPU,原地等待。
生活例子:烧水时盯着水壶,啥也不干,等水开。
1.4 非阻塞(Non-Block)
遇到IO不卡死,继续执行其他任务,隔一会检查是否完成。
生活例子:烧水同时玩手机、扫地、看书,水开再处理。
二、四种组合模型(面试必考)
1. 同步阻塞(最笨、最慢、普通代码默认)
干等、顺序执行、全程阻塞。
普通脚本、基础代码全部是这种模式。
2. 同步非阻塞
轮询查询,不断判断任务是否完成,极少用。
3. 异步阻塞
提交异步任务,但主线程等待结果。
4. 异步非阻塞(最快、高性能、服务器核心)
不等待、不卡死、最大化利用CPU,协程、高并发框架核心。
三、并发与并行(必区分)
并发(Concurrent)
交替执行,同一时间只有一个任务执行,快速切换看起来像同时运行。
单核CPU实现,线程、协程都是并发。
并行(Parallel)
真正同时执行,多核CPU同一时刻运行多个任务。
多进程实现并行。
一句话口诀 : 并发是宏观同时,微观交替 并行是宏观微观都同时
四、多线程详解(Thread)
4.1 什么是线程?
线程是进程内的最小执行单元,一个进程可以开启多个线程。
线程共享进程资源,切换开销小。
4.2 Python线程致命特点(面试重点)
Python 存在 GIL全局解释器锁
同一时刻一个进程内只有一个线程执行
IO密集型:线程非常快(爬虫、文件、网络)
计算密集型:线程失效、速度变慢(被GIL限制)
4.3 多线程简单实战
import threading
import time
def task(name):
print(f"线程 {name} 开始")
time.sleep(2)
print(f"线程 {name} 结束")
if __name__ == '__main__':
t1 = threading.Thread(target=task, args=("A",))
t2 = threading.Thread(target=task, args=("B",))
t1.start()
t2.start()
t1.join()
t2.join()
4.4 线程优缺点
✅ 开销小、创建快、适合IO等待任务
❌ GIL锁导致无法利用多核CPU、计算任务拉胯
❌ 多线程存在数据竞争,需要加锁
五、协程详解(Coroutine)------ Python最高效IO方案
5.1 什么是协程?
协程是单线程内的微并发,用户态手动切换,无系统开销。
线程切换由操作系统调度,协程由程序自己调度。
5.2 协程核心优势
切换零开销(比线程快几十倍)
无需锁、无竞争、数据安全
超高并发量,上万协程轻松跑
完美避开GIL锁问题
5.3 async/await 实战案例
import asyncio
async def task(name):
print(f"协程 {name} 开始")
await asyncio.sleep(2)
print(f"协程 {name} 结束")
async def main():
await asyncio.gather(
task("A"),
task("B"),
task("C")
)
if __name__ == '__main__':
asyncio.run(main())
三个任务总共只耗时2秒,同步需要6秒。
六、多线程 VS 协程(终极对比)
| 特性 | 多线程 Thread | 协程 Coroutine |
|---|---|---|
| 调度方式 | 操作系统调度 | 用户程序自主调度 |
| 切换开销 | 大 | 极小 |
| 并发数量 | 有限(几千上限) | 极高(上万、十万) |
| GIL影响 | 受GIL限制 | 不受GIL影响 |
| 数据安全 | 不安全,需加锁 | 安全,串行执行无竞争 |
| 适用场景 | 普通IO、简单并发 | 高并发IO、爬虫、后端接口 |
七、四大场景选型公式(工作直接用)
-
普通代码、简单逻辑 → 同步执行
-
IO密集型(爬虫、请求、文件) → 优先协程、次选多线程
-
计算密集型(运算、数据分析) → 多进程
-
超高并发服务端 → 异步协程框架(FastAPI、Tornado)
八、全文终极总结(背诵版)
-
同步 顺序执行等待结果,异步不等待、后台执行;
-
阻塞 原地卡住,非阻塞灵活切换任务;
-
并发交替执行,并行同时执行;
-
多线程操作系统调度,受GIL限制,适合普通IO;
-
协程用户态自主调度,开销极低,适合高并发IO;
-
IO密集用协程/线程,计算密集用多进程。
✨ 至此 Python 并发核心全部通关!面试作业直接满分!