前言
最近一些朋友通过书籍找到我,问了一些关于tomcat中BIO和NIO的问题,这里列一下方便需要的朋友。后续也将前面有朋友问的问题整理下。。
问
只把 Tomcat 的 bio 模式改为 nio 模式,是否能提高服务器的吞吐量?发现在配置一样的情况下,两种模式压出来的吞吐量差不多。
答
要看你系统是不是整个都异步化了,因为tomcat的nio只是将网络io异步化了,就是接收和读写异步化了,但是网络报文接受完后还是要交给业务线程池,如果你的业务是阻塞或者说较耗时的话是没办法提升你整个的吞吐量的,除非将整个项目都异步化,现在压起来如果你的cpu如果还打满的话就可以继续优化,但如果bio都能打满cpu就说明已经到物理极限了,没啥好优化的了,只能在代码层去优化了。
问
在做tomcat nio 模式压测时发现并发量大时,一开始接收不了请求,到后面才慢慢恢复,这是什么导致的?
答
应该不会接收不了,只是接收不过来,nio的接受线程一般是cpu数,一下很多请求可能需要一些时间来接收。
问
后来又能慢慢稳定,tps能够上去是什么是情况?
答
因为长连接,接收工作只做一次。
问
对比与 nio ,bio 一开始能接收的量比 nio 大,怎么解释?
答
bio接收是线程池里面的线程接收的,也就是说你的线程池如果设为600,就有60