说协程是‘轻量级线程’,这个比喻非常形象,但它背后的实质是协程在资源消耗、切换效率和并发模型上,相对于传统线程有着数量级的优势。我们可以从‘轻’在何处,以及‘量’的对比来深入理解。”
第一部分:“轻”在何处?—— 与线程的核心差异
1. 资源开销的极致差异(内存)
这是最直观、最硬核的“轻量”体现。
-
线程:在Linux系统(Android内核)中,每一个线程都是一个内核级的对象。它需要预先分配一个固定的、较大的内存块作为栈空间(Stack)。这个大小通常在MB级别(例如,在JVM中默认可能是512KB-1MB)。创建成千上万个线程,首先耗尽的就是内存。
-
协程:协程是用户态的,完全由编程语言或库在应用层实现。它的栈空间是动态分配和伸缩的,初始只需要极小的内存(可能只有几十到几百字节)。成千上万个协程可以在同一个线程上共存,其总内存消耗远小于同等数量的线程。
结论:你可以在一个应用中轻松创建数万个协程而不会导致OOM,但创建数千个线程就很可能耗尽内存。这是“轻量级”在空间上的体现。
2. 切换效率的云泥之别(时间)
这是性能提升的关键。
-
线程上下文切换(Thread Context Switch):
-
当CPU从一个线程切换到另一个线程时,需要陷入内核态(Trap into Kernel)。
-
内核需要保存当前线程的完整执行状态(包括寄存器、程序计数器、栈指针等),然后加载下一个线
-

最低0.47元/天 解锁文章
1073

被折叠的 条评论
为什么被折叠?



