JEP 444:针对 Java 21 的虚拟线程
💡
原文中文,约3700字,阅读约需9分钟。
📝
内容提要
本文介绍了如何使用虚拟线程提高服务器应用程序的可扩展性,虚拟线程是一种轻量级线程,可以显着减少编写、维护和观察高吞吐量并发应用程序的工作量。虚拟线程可以保留每个请求线程的风格,同时与平台保持和谐。虚拟线程可以在请求的整个持续时间内在虚拟线程中运行,但虚拟线程仅在它在 CPU 上执行计算时使用操作系统线程。虚拟线程既便宜又充足,因此永远不应该被池化。虚拟线程可以运行平台线程可以运行的任何代码,支持线程局部变量和线程中断。虚拟线程可以显着提高应用程序吞吐量,但需要注意内存使用和与垃圾收集的交互。
🎯
关键要点
-
虚拟线程是一种轻量级线程,可以提高服务器应用程序的可扩展性。
-
虚拟线程允许以每个请求一个线程的方式编写服务器应用程序,易于理解和调试。
-
服务器应用程序的可伸缩性受Little定律支配,要求并发请求数与吞吐量成比例增长。
-
传统的操作系统线程数量有限,导致无法实现每个请求一个线程的风格。
-
异步编程风格虽然提高了可扩展性,但增加了编程复杂性和调试难度。
-
虚拟线程可以在请求的整个持续时间内运行,并且仅在执行计算时使用操作系统线程。
-
虚拟线程的创建成本低且几乎无限,适合高并发场景。
-
开发人员可以选择使用虚拟线程或平台线程,虚拟线程适合短暂任务。
-
虚拟线程支持线程局部变量和线程中断,易于与现有Java代码兼容。
-
不应对虚拟线程进行池化,因为它们并不昂贵。
-
虚拟线程堆栈不是GC根,允许在特定条件下被垃圾收集。
➡️