用多线程提高服务器吞吐量

2017-12-04  本文已影响0人  Michael_1615

为什么需要多线程提高服务器吞吐量?

web容器可以开的线程是有限,比如tomcat,如图1。

为了提高吞吐量,我们可以通过Callable执行任务,从而放出主线程,如图2。

但是大部分的时候业务逻辑比较复杂,Callable并不能完全满足我们的需求,如图3. 这时候我们就需要DeferredResult帮助我们。

Callable和Deferredresult做的是同样的事情——释放容器线程,在另一个线程上异步运行长时间的任务。

那么,DeferredResult和返回Callable有什么区别?

不同的是这一次线程是由我们管理。创建一个线程并将结果set到DeferredResult是由我们自己来做的。

用completablefuture创建一个异步任务。这将创建一个新的线程,在那里我们的长时间运行的任务将被执行。也就是在这个线程中,我们将set结果到DeferredResult并返回。

剩下的图是部分代码和结果

上一篇下一篇

猜你喜欢

热点阅读