同步,异步,阻塞,非阻塞

要分层次进行分析“同步”与”异步“

1.进程间通信层面
《操作系统概念(第九版)》中说明:
进程间通信是通过调用send()和receive()原语实现的。调用方案有多种,信息的通过是阻塞非阻塞二者之一。
同时在此层面同步异步阻塞非阻塞意义相同。
阻塞接口:会等待信息返回,且等待时会导致进程被挂起。
非阻塞接口:会立刻返回调用,使进程能够正常运行,稍后会返回结果通知。

阻塞发送:发送信息被阻塞,直到信息被接收。
非阻塞发送:信息被发送后可直接进行其他操作。
阻塞接收: 调用receive()后被阻塞,直到获得信息。
非阻塞接收:接受信息或者接收空值即不会被阻塞。

2.系统调用层面
上下文为unix中Network IO

POSIX的定义:

A synchronous I/O operation causes the requesting process to be blocked until that I/O operationcompletes;

An asynchronous I/O operation does not cause the requesting process to be blocked;

两个指的都是在IO整体操作过程中。
IO整体操作过程中重要的两点
1,内核空间进行数据准备。
2,将内核空间中的数据复制到用户空间中。

情况中从硬盘中提取数据到内核空间准备数据复制到用户空间之中 read操作实例。

阻塞IO模型: 内核空间准备数据时,用户空间中的进程被阻塞,从内核将数据拷贝到用户空间时进程同样被阻塞。

非阻塞IO模型:进程发起read操作时, 内核空间准备数据中,会发送error给用户空间进程表明数据未准备就绪,此时进程未被阻塞可以进行其他操作,但进程会向内核发起轮询,实际是将大片阻塞时间分为小段阻塞,但cpu的控制权未被进程交出,在间隔时间中依然会被cpu光顾。但在数据准备完成后,将数据从内核复制到用户内存时,进程会被阻塞。

IO multiplexing(多路复用):
复用针对的是有限的资源与使用者过多的不平衡问题。
理论基础:基于资源的可释放性。
select/epoll
使用非阻塞socket,
进程分出一条线程监控select/epoll函数,在调用select/epoll函数时会将进程阻碍,直到返回结果。
select是进行轮询,
epoll:
对fd数量没有限制(当然这个在poll也被解决了)
抛弃了bitmap数组实现了新的结构来存储多种事件类型
无需重复拷贝fd 随用随加 随弃随删
采用事件驱动避免轮询查看可读写事件

异步IO:
内核空间数据准备阶段不会阻塞进程,且内核空间主动复制数据到用户空间同样不阻塞进程,需要进一步通知进程数据已经复制完毕。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值