
-
Java 19 引入虚拟线程,Java 21 成为了标准功能,本质和 Go 的携程一样,都是在用户态进行线程切换,极大地提高了性能,大大简化了 IO 密集型应用的开发。
-
结论:
- Go 角度:Java 的虚拟线程是在单线程基础上模仿 Go 协程的优化,目前空转性能相比 Go 差 10 倍,综合性能更是差很多,不足为惧。
- Java 角度:在单线程模式下,初步引入了协程,可以轻松使用,结合 Java 的面向对象等优良特性,有助于稳步提升市场占有率。
| 设计点\语言 | Go | Java |
|---|---|---|
| 用户态运行 | √ | √ |
| 多 CPU | √ | × |
| 阻塞前主动调度 | √ | √ |
| 调用便利性 | go func1() | try (Executors.new()) {} |
| 同步原语 | goroutine | lock |
| 内存申请 | ||
| GC | ||
| 协程栈扩缩容 | ||
| 文件阻塞 | ||
| 网络阻塞 | ||
| 长时间未调度 |