阻塞和非阻塞 同步和异步

陈硕大神原话:在处理IO的时候,阻塞和非阻塞都是同步,只有使用了特殊的API才是异步IO

IO的同步和异步

典型的一次IO分为两个阶段:
数据准备:阻塞和非阻塞
数据读写:同步和异步

1.数据准备阶段
阻塞:套接字接收缓冲区如果没有数据时,I/O函数阻塞等待,线程进入阻塞状态
非阻塞:套接字接收缓冲区没有数据,I/O函数立即返回(recv返回-1,并设置errno=EAGAIN),不会改变线程状态
2.数据读写阶段
同步:当接收缓冲区有数据到来时,需要用户主动调用I/O函数进行读写,将数据从接收缓冲区搬到用户自定义的缓冲区中,数据的读写需要用户程序自己操心
异步需要操作系统提供特殊的异步I/O接口,用户只需要向内核提供套接字和缓冲区,并约定通知方式(信号),用户程序就可以做自己的事情了。当有套接字有I/O发生时,由操作系统进行数据的读写操作,读写完成之后通知用户,此时用户的缓冲区就已经有数据了。就是说用户不需要操心数据的读写,被通知的时候I/O已经完成了
异步IO模型:AIO(LINUX) IOCP(windows)

业务层的同步和异步

同步:A操作等待B操作做完事情,得到返回值,继续处理
异步:A操作 告诉 B操作它感兴趣的事件以及通知方式,A操作继续执行自己的业务逻辑了;等待B监听到相应事件发生后,B会通知A,A开始相应的数据处理逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值