您的位置:首页 > 编程语言 > Java开发

再谈一次关于Java中的 AIO(异步IO) 与 NIO(非阻塞IO)

2015-06-18 08:23 609 查看
今天用ab进行压力测试时,无意发现的:

Requests per second: xxx [#/sec] (mean)

ab -n 5000 -c 1000 http://www:8080/upload/5kb.jpg (NIOServer: 700 AIO: 400)

ab -n 5000 -c 1000 http://www:8080/upload/18kb.jpg (NIOServer: 560 AIO: 360)

ab -n 2000 -c 100 http://www:8080/upload/134kb.jpg (NIOServer: 330 AIO: 300)

ab -n 2000 -c 200 http://www:8080/upload/134kb.jpg (NIOServer: 330 AIO: 260)

ab -n 3000 -c 500 http://www:8080/upload/134kb.jpg (NIOServer: 300 AIO: 310)

ab -n 5000 -c 800 http://www:8080/upload/134kb.jpg (NIOServer: 270 AIO: 280)

以前测试大部分使用的是 -k (开启:Connection: keep-alive),测试的时候发现AIO完胜NIO。

今天没有使用参数: -k,从上面的结果可以看出:

1. NIO 在高并发的时候,如果处理的是小图片(1kb - 100kb),NIO的并发性能比AIO还要好。

原因也很简单,NIO不管有多少并发,一般只使用2 - 3个线程来处理,在处理小图片时,高并发,CPU利用率90%+,并发性能很好。

而AIO,由于是异步的,传输文件使用的是一个线程池,一般会使用20 - 30个线程, 在处理小图片时,高并发,由于线程较多,CPU利用率在 50% - 70%,并且多个线程切换也浪费了一些性能,并发性就不如NIO了。

2. 当处理的文件越来越大,如100KB+,高并发的时候,AIO就达到或超过NIO了,两者工作时的CPU利用率:90%+

2013-03-06
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: