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

  • 相关阅读:
    Oracle学习
    挑战练习11.5 恢复CrimeFragment的边距
    844. Backspace String Compare
    496. Next Greater Element I
    682. Baseball Game
    707. Design Linked List
    挑战练习10.6 实现高效的RecyclerView刷新
    挑战练习9.5 日期格式化
    挑战练习8.8 RecyclerView ViewType
    挑战练习6.5 限制作弊次数
  • 原文地址:https://www.cnblogs.com/Jun10ng/p/12984944.html
Copyright © 2011-2022 走看看