网络I/O优化的基本原则:
1.减少网络交互的次数
在网络交互两端设置缓存,发起交互的一端设置缓存,如优秀的数据库框架hibernate,mybatis都有一级缓存和二级缓存,有效的减少了数据库的访问次数,即减少了网络链接的次数,在接收端设置缓存可以减少数据的处理时长,使ESTABLISHED状态缩短,加快链接释放速度,链接状态转换如下图:
也可以通过合并的方式减少交互次数,即批量请求,比如数据库事务.
2.减少网络传输数据量的大小
发送内容可以压缩后在发送
3.尽量减少编码
网络i/o中都是通过字节传输的,如果要传输的是字符形式的数据,字符转化字节比较耗时,如果在传输前就将字符转成字节,可以减少传输时间
可以通过序列化方法对发送的数据进行压缩,如用protobuf工具来传输数据量较大的数据
4.同步与阻塞
同步是指做完一件事才能做第二件事,发送两个请求,发送完一个并返回结果才能发送第二个,而异步则是可以同时做两件事
阻塞是指一个流程卡主时cpu空闲下来等待流程畅通,非阻塞则为cpu去做其他的事情,Nio中非阻塞的体现就是cpu可以轮询其他的通道.
组合的方式有4种,分别实同步阻塞、同步非阻塞、异步阻塞、异步非阻塞,如下表所示。这4种方式都对I/O性能有影响。
组合方式 | 性能分析 |
---|---|
同步阻塞 | 最常用的一种用法,使用也是最简单的,但是I/O性能一般很差,CPU大部分处于空闲状态 |
同步非阻塞 | 提升I/O性能的常用手段&#x |