最近我开始学习非阻塞 Java 框架,其中有一个引起了我的注意reactive
- .event-driven
vert.x
我想同样的问题可能适用于akka(Play 框架),因为他们的理念或目标之一是相同的——那就是减少线程数,从而提高应用程序的可扩展性。
vert.x
建议它消耗的线程数〜相当于 CPU 内核的数量,但它也牢记有时您必须执行阻塞操作,因此它鼓励开发人员在单独的工作线程上执行阻塞操作(工人垂直于vert.x 的条款)。
这就是我们提出我的问题的地方:
- 如果我应该在一个新的单独线程上执行阻塞 IO 操作,这意味着每个执行阻塞操作的用户都有一个新线程,因此线程数再次等于经典阻塞线程模型中的用户数?
一个真实的例子是 JDBC 查询——如果 1000 个并发用户通过 JDBC 查询一个 SQL 数据库,每个用户都会为该阻塞操作生成它自己的工作线程。从我的角度来看,与经典的阻塞线程模型相比,没有线程备用、改进的可扩展性或 RAM 备用。我一定是错过了什么……或者没有?提前感谢所有答案。