关于同步/异步/阻塞/非阻塞IO的理解

本文深入解析了计算机科学中IO模型的概念,包括阻塞IO与非阻塞IO、异步IO与同步IO的区别,以及它们在实际应用中的作用。通过对比不同IO模型的特点,帮助读者理解如何在编程中选择合适的IO策略。

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

  1. IO 指的是数据的读写,数据在存储介质或网络上的读写。

  2. 阻塞IO与非阻塞IO 指的是两种读写IO数据的方式,是以对数据读写这个动作 (方法/函数/过程)是否立即返回结果来区分,阻塞不会立即返回结果,这往往会造成当前触发(调用)此动作(方法/函数/过程)的线程挂起(阻塞),非阻塞IO则会立即返回结果(是否读取成功),线程不会被挂起(阻塞)。

  3. 异步IO与同步IO 指的是当前线程是否需要自己处理IO读写的相关过程(IO数据的轮询和复制),同步IO需要当前线程自己处理,而异步IO不需要自己处理,而是将这任务交给操作系统内核,内核创建新的线程去做个任务,任务完成(将IO数据复制到使用异步IO的线程的数据空间)再通知异步IO线程去对数据进行下一步处理。

  4. 同步阻塞IO 指的是使用同步IO的线程自己使用阻塞IO这样的读写数据方式去读写数据,不需要轮询数据是否准备好,因为阻塞IO会阻塞当前线程直到读取到数据并返回。

  5. 同步非阻塞IO 指的是使用同步IO的线程自己使用非阻塞IO这样的读写数据方式去读写数据,由于非阻塞IO不阻塞线程,立即返回读取数据结果,这个结果可能失败可能成功,所以需要当前线程不时轮询这个结果,并在成功的状态下自己再将数据复制到本线程数据空间以便使用。

  6. 异步阻塞IO 指的是使用异步IO的线程自己将IO请求即读写数据的的任务请求给操作系统内核,操作系统内核新建一个线程来完成这个任务,并且这个线程使用阻塞IO方式来读写数据,所以只有这个线程会被阻塞,在读写成功之后,通知使用异步IO的线程自己将数据复制到它的线程数据空间。

  7. 异步非阻塞IO 则更进一步,内核创建的线程使用非阻塞IO来读写数据,并且数据的复制也由一并完成,使用异步非阻塞IO的线程最后只等待操作系统通知它是否可以直接开始使用数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值