python网络编程:异步与多线程,异卵双胞胎!

异步 多线程 多进程
比喻 一个在烧水、泡衣服与洗碗的人 很多洗碗的人 很多语言不通的洗碗的人
核心 很多需要等待的函数同时运行 很多计算任务同时运行
原理 await转让控制权,再次事件循环 共享内存 不共享,使用IPC跨进程消息沟通
限制 - 若 async 函数内有耗时操作 , 会阻塞事件循环
- async有传染性
- 原子锁/资源竞争
- python的GIL 会导致CPU密集型(计算)缓慢 , 但不影响I/O操作(如Popen)
进程间通信开销较大,创建和销毁进程的成本较高

虽然在python 3.13引入了实验性的 无GIL锁 支持,快了1倍!

事件循环

大部分编程语言的底层实现:

微任务 → 宏任务 → 异步队列 $ \overset{\text{遇到await}}{\longrightarrow} $ 微任务……

posted @ 2025-03-01 21:22  Nolca  阅读(16)  评论(0)    收藏  举报