zoukankan      html  css  js  c++  java
  • 非阻塞IO和异步IO的区别

    非阻塞IO和异步IO的区别

    非阻塞IO

    非阻塞IO是同步IO的一种,指的是client发生一个调用函数,但是该调用不立即返回计算结果,而是传递一个error,这样client就知道还没准备好。client可以做其他事情。等到IO处理完毕,该调用则返回计算结果。也就是说client在主动等待这个结果。
    在下图中,我们可以看到非阻塞IO的流程,一直都是client在主动询问对方准备好了没。一共传输两次数据,一次error,代表没准备好,还有最后一次的询问直接返回计算结果。

    异步IO

    而异步IO的方式,会让调用函数立即返回(注意和非阻塞IO的error是传递回来的,而不是返回,也就是它的调用函数一直在等),同时留下一个回调接口,让IO线程在处理完后通过回调接口通知client。

    IO多路复用

    IO多路复用是基于非阻塞IO的,也就是有一个函数(select,poll,epoll)会不断的轮询一个它所监视的socket(一个或多个),一旦有请求到达则立即处理,这样就可以用一个线程(运行函数的线程)处理多个socket。

    select和poll的区别在于poll不限制socket数量

    epoll和其他两者的区别在于,epoll能返回有数据准备好的具体socket,而不用再对socket扫描一次,做一次复杂度O(n)的遍历。一旦通道数量多了,浪费的时间还是很多的。

    参考资料1
    参考资料2

  • 相关阅读:
    Git更新或提交出错的解决办法
    webpack简单学习的入门教程
    CentOS源码安装QT
    后台程序在向tty/串口写数据的时候stop了
    Linux signal 处理
    Linux C 获取 文件的大小
    Microsoft Excel 标题栏或首行锁定
    Socket连接何时需要断开
    Windows MFC 打开文本
    动态库的生产和调用
  • 原文地址:https://www.cnblogs.com/Jun10ng/p/12984944.html
Copyright © 2011-2022 走看看