• 5中I/O模型


    输入操作包括两个阶段
    1.等待网络数据到达,被复制到内核中的缓冲区
    2.从内核缓冲区复制到进程缓冲区
    5种I/O模型
    1.阻塞式I/O:包含数据被复制到内核缓冲区和应用进程缓冲区两个过程,调用recvfrom,对应于阻塞式socket
    2.非阻塞式I/O:不停的去轮询(polling)内核,如果有描述符准备好复制到进程缓冲区再调用recvfrom,对应于非阻塞式socket
    3.I/O复用(select,poll):阻塞在select,polll系统调用,而不是真正的系统调用上,当select,poll返回时,再调用recvfrom复制数据
    4.信号驱动式I/O:开启套接字的信号驱动I/O功能,调用recvfrom复制数据
    5.异步I/O:当数据被复制到进程缓冲区通知我们,等于两部都完成了

    1.2.3.4第一阶段部不同,但第二阶段相同,都要调用recvfrom复制数据。5两个过程都完成过了

    同步I/O操作:导致请求进程阻塞,直到I/O操作完成

    异步I/O操作:不导致请求进程阻塞

    所以1.2,3,4以为真正的I/O操作recvfrom都要阻塞进程,所以同步I/O操作,5是异步I/O操作

    /////////////////////////

    select非阻塞式socket为啥比select阻塞式socket效率高:

    当我们调用write时,如果此时发送缓冲区已满,则进程阻塞住,此时如果接收缓冲区有数据,我们无法读取

    如果们处理read出来的数据比较慢时,此时write操作也会被阻塞住。

    而非阻塞socket可以防止进程在做任何操作时发生阻塞,比如read操作没数据可读会返回错误码,write操作发送缓冲区满了,也是返回错误码。不会对其他的操作造成影响。

    354.0s  停等版本

    12.3s    select+阻塞i/o

    6.9s    select+非阻塞i/o版本

    8.7s    fork版本

    8.5s    多线程版本

  • 相关阅读:
    【转】合并两个List并去掉重复项
    vue父子组件的通信
    深入理解--VUE组件中数据的存放以及为什么组件中的data必需是函数
    Vue-组件模板抽离的写法
    VUE-父组件和子组件
    vue -全局组件和局部组件
    vue-组件化开发基础
    vue---v-model的详细解答
    map、filter、reduce函数的使用
    vue--购物车案例(小知识点总结)
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/12020132.html
Copyright © 2020-2023  润新知