一、从内核线程到用户态线程:虚拟线程的前世今生
1.1 传统线程模型的困境
自1997年JDK 1.0发布以来,Java的线程模型始终基于操作系统内核线程实现。每个java.lang.Thread实例对应一个OS线程,这种1:1的映射模型在云计算时代暴露出严重缺陷:
-
线程创建成本高昂(约1MB内存/线程)
-
上下文切换需要内核介入(约1-10μs)
-
最大并发数受限于OS配置(通常不超过10^4)
// 传统线程创建示例
new Thread(() -> {
System.out.println("OS thread: " + Thread.currentThread());
}).start();
1.2 协程的复兴之路
为突破并发瓶颈,各语言纷纷实现轻量级线程:
-
Go (goroutine)
-
Erlang (processes)
-
Kotlin (coroutines)
Java社区曾涌现多个解决方案:
-
Quasar项目(基于字节码增强&#