外观
一句话答案
协程是用户态轻量级线程,切换不需内核介入成本极低,可创建百万级;Java 21 虚拟线程(Virtual Thread)是协程实现。
核心要点
vs 线程: 协程用户态调度(无内核切换开销) / 更轻量(KB级栈) / 可创建百万级
Java 虚拟线程(JDK 21): Thread.ofVirtual().start(() -> task())
原理: 虚拟线程挂载在载体线程(平台线程)上,IO阻塞时自动卸载让出载体线程
追问与易错
追问方向:
- Java 虚拟线程和 Go goroutine 区别?
- 虚拟线程的限制?
- 什么场景适合虚拟线程?
易错点:
- ❌ 虚拟线程解决所有并发问题——CPU 密集不适合
- ❌ 虚拟线程就是绿色线程——实现不同
💡 记忆锚点
线程像OS分配的正式员工(MB级栈,内核调度),协程像临时工(KB级栈,用户态自己排班),雇佣和换岗成本极低所以能雇百万个。Java 21虚拟线程就是协程:虚拟线程"骑"在平台线程上干活,遇到IO等待就自动下马让别的虚拟线程骑上去,但CPU密集型任务没马可换所以不适合。