zoukankan      html  css  js  c++  java
  • 读书笔记-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先干其他事,慢操作完成再来执行后续的事。

        

  • 相关阅读:
    python之filter()函数
    figure margins too large错误解决
    “一个字等于多少个字节?”是一个不严谨的问法
    如何区分按字节编址与按字编址
    (stm32学习总结)—LCD—液晶显示
    (stm32学习总结)—GPIO位带操作
    (stm32学习总结)—SPI-FLASH 实验
    修改寄存器的位操作方法
    (stm32学习总结)—对寄存器的理解
    (stm32f103学习总结)—初识stm32
  • 原文地址:https://www.cnblogs.com/liun1994/p/6415369.html
Copyright © 2011-2022 走看看