(Kotlin协程十一)为什么说协程是“轻量级线程”

说协程是‘轻量级线程’,这个比喻非常形象,但它背后的实质是协程在资源消耗、切换效率和并发模型上,相对于传统线程有着数量级的优势。我们可以从‘轻’在何处,以及‘量’的对比来深入理解。”

第一部分:“轻”在何处?—— 与线程的核心差异

1. 资源开销的极致差异(内存)

这是最直观、最硬核的“轻量”体现。

  • 线程:在Linux系统(Android内核)中,每一个线程都是一个内核级的对象。它需要预先分配一个固定的、较大的内存块作为栈空间(Stack)。这个大小通常在MB级别(例如,在JVM中默认可能是512KB-1MB)。创建成千上万个线程,首先耗尽的就是内存。

  • 协程:协程是用户态的,完全由编程语言或库在应用层实现。它的栈空间是动态分配和伸缩的,初始只需要极小的内存(可能只有几十到几百字节)。成千上万个协程可以在同一个线程上共存,其总内存消耗远小于同等数量的线程。

结论:你可以在一个应用中轻松创建数万个协程而不会导致OOM,但创建数千个线程就很可能耗尽内存。这是“轻量级”在空间上的体现。

2. 切换效率的云泥之别(时间)

这是性能提升的关键。

  • 线程上下文切换(Thread Context Switch)

    • 当CPU从一个线程切换到另一个线程时,需要陷入内核态(Trap into Kernel)

    • 内核需要保存当前线程的完整执行状态(包括寄存器、程序计数器、栈指针等),然后加载下一个线

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值