阻塞与非阻塞、同步与异步、异步I/O

本文探讨了阻塞与非阻塞、同步与异步的概念,并重点解释了异步I/O的工作原理,指出真正的异步I/O是利用特殊API让内核完成数据搬运。同时,介绍了Unix/Linux的5种I/O模型,包括阻塞、非阻塞、IO复用、信号驱动和异步I/O,阐述了它们的特点和应用。
摘要由CSDN通过智能技术生成

1. 阻塞与非阻塞

就是是否等待的区别,以 linux的 Socket 通信来说:

  • 阻塞就是调用 read() 读取socket时,如果没有数据,就会阻塞着循环等待,直到有数据时再继续执行读操作
  • 非阻塞就是如果设置了这个socket 非阻塞属性后,没有数据时也会循环地读取,但会直接返回读取的结果(读到的字节数、错误代码)

2. 同步与异步

同步与异步其实是一种思想上的区别,借网上的一个例子来说:

  • 同步就是,当你开了一家快餐只能打包带走的,来一个客人给他现做一份,其他的就在后面排队,阻塞着等待
  • 异步就是,开了一家餐馆或者外卖,客人来了点菜或者发一个订单
应用场景上:
同步需要立刻得到反馈,没有就等着不干别的事情;
而异步就不需要,只需要下订单然后等他完成之后提醒你就行了,这时候可以干其他的事情

3. 异步I/O

这时候可能会有疑问:异步I/O是不是设置Socket非阻塞就行了?有数据就读取,数据没有就立即返回。
不是的。当Socket有数据时,主线程要不断把Socket上的数据搬到到本地的缓冲区内,写的时候要不断地把本地缓冲区的数据搬到Soc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值