zoukankan      html  css  js  c++  java
  • 阻塞非阻塞,同步异步四种I/O方式

    举一个去书店买书的例子吧:

    (同步)阻塞:

    你去书店买书,到柜台告诉店员,需要买一本APUE,然后一直在柜台等。(阻塞)

    店员拿到书以后交给你。

    (同步)非阻塞:

    你去书店买书,到柜台告诉店员A,需要买一本APUE。但是你不在柜台等了,而是出去遛弯。(非阻塞)

    隔几分钟回去柜台问一次:“我的书来了没有?”“我的书来了没有?”

    终于有一次书来了,你就拿着书走了

    (同步)I/O多路复用(poll/select/epoll):

    去书店买书,告诉店员自己要买APUE,然后拿到一个号。每个顾客都是这样。

    店员每拿一本书出来就叫号,这样每个人都能快速拿到自己的书

    异步(libevent/libev/libuv):

    你去书店买书,到柜台告诉店员A,需要买一本APUE。但是你丢下自己的地址,告诉店员,书你拿回来了直接叫快递送到下面这个地址就行了。

    店员拿会书以后直接叫个快递,送到你家。

    (如果是异步阻塞就是:店家拿到书以后会送给你,你还要一直在这等。比较奇葩)

    阻塞/非阻塞则是 API 调用者(我)的等待方式。

    同步/异步是API 被调用者(店员)的通知方式。

    参考:https://ring0.me/2014/11/sync-async-blocked/

  • 相关阅读:
    大型网站应用中MySQL的架构演变史
    SRM 585 DIV2
    TC 配置插件
    Java中含有静态成员的的初始化顺序
    java 23种设计模式,一般情况下,常用的有哪些? 转载
    Java中的正则表达式
    C++ 中的关于输出的设置于
    C++实现可变参数列表
    Java中的组合与聚合
    pku 2284 That Nice Euler Circuit
  • 原文地址:https://www.cnblogs.com/qooweds/p/5787025.html
Copyright © 2011-2022 走看看