通过减少非阻塞部分的线程资源,扩展具有阻塞数据库访问的服务器



我想构建一个流程。我在一个队列中有多个请求要处理。一个线程(称为T1(接收第一个请求,开始处理它,然后在它必须进行一些阻塞数据库访问时将它传递给另一个线程。T1现在应该可以自由处理来自队列的另一个请求了。阻止数据库访问是由T2池中的一个线程完成的。然后,在数据库操作完成后,来自T2的线程将其传递给线程T3,线程T3返回请求的处理结果,然后可以自由返回T2处理的另一个结果。

我想这样做是为了避免一个线程对一个请求模型,因为这会带来大量的上下文切换开销,所有线程最终都会阻塞数据库访问,并且CPU资源会被浪费。T1和T3线程可以被认为是大小有限的线程池,这取决于CPU中的核。

在了解了async servelet之后,我考虑了上面的方法,因为在收到请求后,它不会阻塞线程,而是由另一个线程来完成任务,并在稍后返回响应。让我知道我需要构建的流程在java中是否可行,以及如何实现它的一些资源。

拆分单个请求似乎是个好主意,但为了优化资源的使用,我会寻找使用信号量的方法,并让每个请求由不同的线程处理

尝试限制带有信号量的请求数量,并限制对每次只能访问一个的资源的访问,也可以使用信号量

拆分单个请求可能是个好主意,但我认为这主要是在您希望将数据保存在某些文件中以降低线程内存使用率的情况下的好主意

如果我能找到我的旧项目,我稍后会尝试添加一些Java代码。。。

最新更新