也说同步异步阻塞非阻塞

48 篇文章 1 订阅
44 篇文章 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值