关闭

也说同步异步阻塞非阻塞

标签: 异步io同步阻塞非阻塞
401人阅读 评论(0) 收藏 举报
分类:

这里所说的概念都是指 API 和 网络 I/O 方面的,如果是其他科目同一词汇可能表达的是完全不同的概念,比如布式系统里的同步表示是各节点按照时钟节拍同步,而异步是收到消息后立即执行

同步就是调用方一直等着被调方完成
异步就是调用方不必等着被调方完成,完成后被调方通知调用方
阻塞就是调用方一直等着消息
非阻塞就是调用方不必一直等待消息,可以先去干别的

举个例子,就用在饭店点菜做例子
同步阻塞就是点完菜在前台一直等着上菜
同步非阻塞就是点完菜在前台处玩手机
异步阻塞就是点完菜回座位一直等着上菜
异步非阻塞就是点完菜回座位上玩手机

同步和异步关心的是调用方和被调方之间消息通信的机制
同步:发出的调用在没有得到结果之前不返回
异步:发出调用即刻返回,等待回调函数返回结果
异步编程:Node.js
阻塞非阻塞关心的是调用方在等待结果时的状态
阻塞是在调用返回结果之前一直等待
非阻塞是在调用返回结果之前不必等待,但是可以经常检查是否完成

是否阻塞和同步异步没有任何关系
你是等着上菜还是玩手机和你在前台等还是在座位等没有任何关系

在类 UNIX 中存在五种 I/O 模型

  • 阻塞式I/O
  • 非阻塞式I/O
  • I/O复用(select,poll,epoll…)
  • 信号驱动式I/O(SIGIO)
  • 异步I/O(POSIX的aio_系列函数)

想要详细了解请参阅《 UNIX 网络编程:卷一》
对 UNIX 来讲:阻塞式 I/O (默认),非阻塞式 I/O (nonblock),I/O 复用(select/poll/epoll)都属于同步 I/O,因为它们在数据由内核空间复制回进程缓冲区时都是阻塞的(不能干别的事)。只有异步 I/O 模型(AIO)是符合异步 I/O 操作的含义的,即在1数据准备完成、2由内核空间拷贝回缓冲区后 通知进程,在等待通知的这段时间里可以干别的事

image_1ajbgp3dn1c3q17u11of81t0g1grk9.png-142.2kB
陈硕认为在处理 IO 的时候,阻塞和非阻塞都是同步 I/O,而只有使用了特殊的 API 才是异步 IO

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:155075次
    • 积分:2708
    • 等级:
    • 排名:第13852名
    • 原创:97篇
    • 转载:38篇
    • 译文:11篇
    • 评论:9条
    最新评论