基于虚拟线程Loom的执行器是Tomcat标准线程池的可行替代方案?


使用基于虚拟线程的执行器是 Tomcat 标准线程池的可行替代方案。就容器开销而言,切换到虚拟线程执行器的好处是微不足道的。

Tomcat 的标准线程池和基于虚拟线程的执行器之间性能差异的主要驱动因素是在线程池队列中添加和删除任务的争用。通过优化 Tomcat 使用的当前实现,有可能减少标准线程池队列中的争用并提高吞吐量。

影响相对性能的次要因素是上下文切换。在并发性超过可用处理器内核数后,两者出现了性能差异,因为虚拟线程的上下文切换比标准线程池中的线程更便宜。

对于 Tomcat 上的经典 Spring MVC,如果没有切换到 Servlet 异步 API、反应式编程或其他异步 API,应该通过切换到基于虚拟线程的执行器来看到一些可伸缩性改进。根据 Web 应用程序的不同,而且这些改进可以在不更改 Web 应用程序代码的情况下实现。

如果已切换到使用 Servlet 异步 API、反应式编程或其他异步 API 的 Web 应用程序不太可能通过切换到基于虚拟线程的执行器来观察可测量的显著差异。

从长远来看,虚拟线程的最大好处看起来是更简单的应用程序代码。
当前方式是:可使用 Servlet 异步 API、反应式编程或其他异步 API 的一些用例将能够使用阻塞 IO 和虚拟线程来满足。

Project Loom 仍处于预览模式。现在考虑在生产中使用虚拟线程还为时过早,但现在是将 Project Loom 和虚拟线程纳入您的计划的时候了,这样您就可以在 JRE 中普遍使用虚拟线程时做好准备。

详细点击原文