zoukankan      html  css  js  c++  java
  • 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    多线程版本

  • 相关阅读:
    query compiler
    non-deterministic-turing-machine
    What-are-P-NP-NP-complete-and-NP-hard
    查询优化器的算法
    Redis 和 I/O 多路复用
    Linux aio
    MySQL 的那些网络超时错误
    MYSQL performance
    jvmti
    JVM Troubleshooting
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/12020132.html
Copyright © 2011-2022 走看看