首页 > 代码库 > 读书笔记-NIO的工作方式

读书笔记-NIO的工作方式

读书笔记-NIO的工作方式

1、BIO是阻塞IO,一旦阻塞线程将失去对CPU的使用权,当前的网络IO有一些解决办法:1)一个客户端对应一个处理线程;2)采用线程池。但也会出问题。

2、NIO的关键类Channel和Selector,Selector相当于调度系统,他可以轮询每个Channel的状态,Channel要比Socket更加具体;Buffer类比Stream更加具体;

  NIO引入Selector、Channel、Buffer就是想把信息具体化,让程序员有机会控制他们。

3、Buffer是一组基本数据类型的元素列表,Buffer有四个索引:capacity、position、limit、mark,用来标识底层操作系统可以读取的数据位置。

4、Channel获取的IO数据首先要经过操作系统的Socket缓存区,再讲将数据复制到Buffer中,这个操作系统缓存区就是底层TCP所关联的RecvQ或者SendQ队列。

5、NIO的数据访问方式:FileChannel.transferXXX,数据直接在内核空间中移动,减少数据从内核到用户空间的复制;FileChannel.map

6、IO调优:

  Linux的iostat命令可以查看系统的IO wait指标是否正常;

  提升IO性能:

    增加缓存、

    设计最优的磁盘方式策略、磁盘寻址策略、这是从底层操作系统层面考虑

    索引

    应用合理的RAID

  TCP网络参数调优

    Linux可以通过查看 /proc/sys/net/ipv4/ip_local_port_range文件来查看可以使用的端口范围;

    如果发现有大量的TIME_WAIT可以设置/proc/sys/net/ipv4/tcp_fin_timeout

    除了上面两个指标,还有TCP连接复用等;

    还有一些调优参数,可查看书籍p52页。

  查看TCP的统计信息:

    cat /proc/net/netstat 查看TCP的统计信息

    cat /proc/net/snmp 查看当前系统的连接情况

    netstat -s : 查看网络的统计信息

  网络IO调优

    减少网络交互次数:

      设置缓存、合并请求

    减少网络传输量:

      gzip压缩、尽量通过协议头获取相关信息

    尽量减少编码:

      尽量以字节形式传送

7、 同步异步:同步就是一个任务的完成需要依赖另一个任务;

  阻塞是从CPU的消耗上来说的,阻塞指的是CPU等待慢操作完成之后完成后续工作,非阻塞是不等待慢操作,CPU先干其他事,慢操作完成再来执行后续的事。

    

读书笔记-NIO的工作方式