python网络编程:异步与多线程,异卵双胞胎!
异步 | 多线程 | 多进程 | |
---|---|---|---|
比喻 | 一个在烧水、泡衣服与洗碗的人 | 很多洗碗的人 | 很多语言不通的洗碗的人 |
核心 | 很多需要等待的函数同时运行 | 很多计算任务同时运行 | |
原理 | await转让控制权,再次事件循环 | 共享内存 | 不共享,使用IPC跨进程消息沟通 |
限制 | - 若 async 函数内有耗时操作 , 会阻塞事件循环 - async有传染性 |
- 原子锁/资源竞争 - python的GIL 会导致CPU密集型(计算)缓慢 , 但不影响I/O操作(如Popen) |
进程间通信开销较大,创建和销毁进程的成本较高 |
虽然在python 3.13引入了实验性的 无GIL锁 支持,快了1倍!
事件循环
大部分编程语言的底层实现:
微任务 → 宏任务 → 异步队列 $ \overset{\text{遇到await}}{\longrightarrow} $ 微任务……
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步