JEP 444:针对 Java 21 的虚拟线程

💡 原文中文,约3700字,阅读约需9分钟。
📝

内容提要

本文介绍了如何使用虚拟线程提高服务器应用程序的可扩展性,虚拟线程是一种轻量级线程,可以显着减少编写、维护和观察高吞吐量并发应用程序的工作量。虚拟线程可以保留每个请求线程的风格,同时与平台保持和谐。虚拟线程可以在请求的整个持续时间内在虚拟线程中运行,但虚拟线程仅在它在 CPU 上执行计算时使用操作系统线程。虚拟线程既便宜又充足,因此永远不应该被池化。虚拟线程可以运行平台线程可以运行的任何代码,支持线程局部变量和线程中断。虚拟线程可以显着提高应用程序吞吐量,但需要注意内存使用和与垃圾收集的交互。

🎯

关键要点

  • 虚拟线程是一种轻量级线程,可以提高服务器应用程序的可扩展性。

  • 虚拟线程允许以每个请求一个线程的方式编写服务器应用程序,易于理解和调试。

  • 服务器应用程序的可伸缩性受Little定律支配,要求并发请求数与吞吐量成比例增长。

  • 传统的操作系统线程数量有限,导致无法实现每个请求一个线程的风格。

  • 异步编程风格虽然提高了可扩展性,但增加了编程复杂性和调试难度。

  • 虚拟线程可以在请求的整个持续时间内运行,并且仅在执行计算时使用操作系统线程。

  • 虚拟线程的创建成本低且几乎无限,适合高并发场景。

  • 开发人员可以选择使用虚拟线程或平台线程,虚拟线程适合短暂任务。

  • 虚拟线程支持线程局部变量和线程中断,易于与现有Java代码兼容。

  • 不应对虚拟线程进行池化,因为它们并不昂贵。

  • 虚拟线程堆栈不是GC根,允许在特定条件下被垃圾收集。

➡️

继续阅读