zoukankan      html  css  js  c++  java
  • BIO和NIO分析

    IO模型分类

        同步阻塞
        同步非阻塞
        异步非阻塞
        没有异步阻塞模型      异步情况下一定不会被阻塞

    BIO流程分析

           

          

         

         nat转换导致客户端和服务端无法建立三次握手

         增加一条路由规则,不使用默认的nat转换地址

         

         线程池的好处

         

        BIO缺点

          accept阻塞
          recv 阻塞
          因为阻塞,所以需要创建的线程过多
          老版本的内核程序

    NIO模型分析

           new IO
           nonblock IO
           一个线程就可以处理多个连接和接收数据
          内核程序在BIO上进行的优化

            

            

        NIO的优点和缺点

               NIO是全路调用,每一次系统调用只能返回一路IO的数据状态

               

              read和recv系统调用在所有的IO模型中是必须要有的,所以我们要优化的点不是read和recv系统调用本身,而是尽量减少一些无效调用的次数。

              1.只对有数据的fd进行read和recv的系统调用

              2.一次系统调用可以返回多个fd的数据

    多路复用模型分析

            一次系统调用返回多个IO路的数据到达状态

             

           select和poll多路复用器      

           缺点
               1.每次都要重新传递所有的fds
               2.每次内核被调用后都会触发一个遍历fds全量的复杂度

          IO模型和线程处理模型的区别
            IO模型只处理到4层
            线程处理模型是7层 通过多线程的方式处理从内核缓存中接收到的数据
            两者之间的同步和异步概念是不一样的    

             

             

             

             

       epoll的机制

               

                

         epoll
             3个系统调用

           epoll_create
              返回一个文件描述符,在内核中开辟一个内存空间用来保存所有的fds

           epoll_ctl
             通过epoll_create返回的fd,来对fd对应的内核空间增删改fds
             把fd空间对应的fds中有状态的fd迁移到一个链表中

          epoll_wait
             实时的返回epoll_ctl操作后的链表集合
             epoll返回的依然是fds集合,但是fd对应的数据还是需要有程序自己读取
             所以epoll也是同步IO模型

        select,poll,epoll的共同点
            内核维护着所有的fd信息
            内核会通过中断完成所有fd的状态的设置,并且把网卡的数据拷贝的内核空间都会触发中断回调
            cpu会根据中断把网卡缓存中的数据包拷贝到fd的内核缓冲去
       epoll
           在中断回调扩展把有数据到达的fd文件描述符拷贝到一个链表中
           调用epoll_wait的时候就不要循环遍历整个程序的fds
           而只需要把整个链表中的fds取走就行
           这就是epoll比select,poll效率高的原因

  • 相关阅读:
    入职外包一个月的感受!(读者投稿)
    作为架构风格的 REST 到底是什么
    PHP基础之查找
    PHP基础之排序
    PHP入门之数组
    PHP入门之函数
    PHP入门之流程控制
    PHP入门之类型与运算符
    DC-1靶机实战和分析
    【基础算法】 状态压缩DP---蒙德里安的梦想
  • 原文地址:https://www.cnblogs.com/yxh168/p/15123944.html
Copyright © 2011-2022 走看看