NIO VS IO
NIO 主要是用在服务端 处理高并发的情况下,用少量的线程处理很多个并发请求,它的优势在服务端、高并发,并且也是基于IO的,相当于封装了一层IO
IO主要用在客户端 处理单一链路,因为同一个socket在处理read和write是不阻塞的,但是同时read或者write都是阻塞的,这导致只能同时一个线程处理read和write
如果基于NIO开发客户端,那么不能体现NIO的优势,一方面封装了IO,反而会下降传输速度,另一方面事件的分发是基于轮训的,可能会有延迟。但是在如果客户端并发达到1千次每秒的情况下,nio可以一次性接受更多的返回,这样就比IO的要快一点,但是不会快非常多,大概也就10%的性能提升。
下面是自己做的一个测试:
Io |
|
|
|
线程 |
每线程请求次数 |
耗时 |
速度 |
150 |
2000 |
99s |
3030c/s |
100 |
2000 |
67s |
3333c/s |
50 |
2000 |
31s |
3225c/s |
20 |
2000 |
21s |
1904c/s |
10 |
2000 |
12s |
1666c/s |
5 |
2000 |
8s |
1250c/s |
1 |
2000 |
5.7s |
351c/s |
Nio |
|
|
|
线程 |
每线程请求次数 |
耗时 |
速度 |
150 |
2000 |
93s |
3225c/s |
100 |
2000 |
58s |
3448c/s |
50 |
2000 |
30s |
3333c/s |
20 |
2000 |
22s |
1818c/s |
10 |
2000 |
12s |
1666c/s |
5 |
2000 |
9s |
1111c/s |
1 |
2000 |
6.3s |
317c/s |