协程是程序自主控制切换的轻量级并发模型,非线程升级版;内存仅kb级、切换百纳秒、i/o期主动让权,但无法突破gil,纯cpu计算无效,须全异步生态支撑。

协程不是线程的“升级版”,而是另一种并发思路——它不靠操作系统调度,也不争抢CPU时间片,而是由程序自己控制任务切换时机。在I/O密集型场景中,协程能显著提升并发性能,但这种提升不是靠“更快地跑”,而是靠“更少地等、更省地占”。
资源占用:内存差一个数量级
每个Python线程默认栈空间约1MB,1000个线程就吃掉1GB内存;而一个协程初始仅占用几KB,1000个协程内存开销通常不到10MB。这意味着同样一台机器,线程模型可能撑不过几百并发,协程却可轻松承载上万连接。
上下文切换:微秒 vs 毫秒
线程切换需陷入内核、保存寄存器、更新调度队列,耗时通常在1–10微秒;协程切换纯在用户态完成,只需保存少量上下文,平均耗时约100纳秒——快出近100倍。高并发下,频繁切换带来的累积开销差异会直接反映在吞吐量和延迟上。
I/O等待期的利用效率
线程在等待网络响应或文件读写时,仍占据内存和调度资源;协程遇到await(如aiohttp.get、asyncio.sleep)会主动让出控制权,事件循环立刻调度下一个就绪任务。同一时刻,成千上万个协程可以“挂起-唤醒”轮转,CPU几乎不空转。
适用边界:别让协程干线程的活
协程无法绕过Python的GIL,对纯CPU计算(如数值循环、加密哈希)毫无加速效果;若混入time.sleep()、requests.get()或未异步封装的库,整个事件循环会被阻塞。真正高效的前提是:所有I/O操作都走async生态(如aiohttp、aiomysql),计算密集部分应交给线程池或进程池处理。











