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

本文介绍了Linux中同步I/O和异步I/O的概念,强调了同步异步的关键在于数据从内核到应用进程空间复制的过程是否阻塞。讨论了Unix的五种I/O模型:阻塞式、非阻塞式、I/O复用、信号驱动式和异步I/O,重点解析了它们之间的区别,特别是阻塞和非阻塞的区别在于第一阶段的等待数据是否导致进程阻塞。最后,阐述了同步和异步关注的是消息通知机制,而阻塞和非阻塞关注的是I/O操作的就绪状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

POSIX对于同步I/O和异步I/O的定义如下:
同步I/O操作导致请求进程被阻塞,直到I/O操作完成为止。
异步I/O操作不会导致请求进程被阻塞。

同步异步区分的关键在于将数据从内核空间复制回应用进程空间的这一过程是否阻塞进程。不管是阻塞还是非阻塞的I/O,当有数据可供消费时,在调用recvfrom()或read()将数据从内核复制回应用进程空间的这个过程中,该进(线)程是阻塞的,是被挂起的,因此他们都是同步的。只不过非阻塞I/O在无数据时,会立即返回,而阻塞I/O不会。而异步的I/O连将数据复制到进程空间的这个过程,都不阻塞进程,而直接由内核完成,之后再以别的形式通知进程。

UnixI/O模型五大划分 :阻塞式I/O模型,非阻塞式I/O模型,I/O复用模型,信号驱动式I/O,异步I/O
1.阻塞式I/O模型:应用进程调用I/O操作时阻塞,只有等待要操作的数据准备好,并复制到应用进程的缓冲区中才返回。

2.非阻塞式I/O模型:当应用进程要调用的I/O操作会导致该进程进入阻塞状态时,该I/O调用返回一个错误,一般情况下,应用进程需要利用轮询的方式来检测某个操作是否就绪。数据就绪后,实际的I/O操作会等待数据复制到应用进程的缓冲区中以后才返回。

3.I/O复用模型:阻塞发生在select/poll的系统调用上,而不是阻塞在实际的I/O系统调用上。select/poll发现有数据就绪后,通过实际的I/O操作将数据复制到应用进程的缓冲区中。

4.异步I/O模

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值