AIO + ByteBufferQueue + allocateDirect 终于可以与NIO的并发性能达到一致。
看到这个标题,你可能会惊讶,相比NIO,AIO不就是为了在高并发的情况下代替NIO的吗?
是的,没错,但是在并发不高的情况下,AIO的性能表现很多时候还不如NIO。
在一台机子上用ab进行并发压力测试,一般只能开到1000并发,但测试的时候发现,如果在100 - 300并发的情况下,AIO的性能表现只达到NIO的80%,在并发500+的情况下,AIO开始接近NIO,在并发800+的时候,AIO才会开始超越NIO.
而我一直在寻找一个能在300并发以内的情况下,达到NIO的性能,不说去超越NIO。
花了好几天的时间,使用ByteBufferQueue(直接字节缓存区队列,可重复使用) + allocateDirect(直接缓存区),经过大量的测试,终于基本上可以达到NIO在300并发以下的性能水平。
2012-07-13