关于IO操作的操作的同步、异步、阻塞、非阻塞

IO分为两个阶段:数据准备阶段以及内核空间复制数据到进程缓冲区阶段

(其中内核空间以及用户空间均属于程序运行的空间,其中进程缓冲区也叫用户空间)

  • 阻塞IO/非阻塞IO:区别在于第一步发起IO请求是否会被阻塞
  • 传统阻塞IO——如果阻塞直到完成
  • 非阻塞IO——不阻塞

同步IO包括:

  1. 阻塞IO
  2. 非阻塞IO
  3. IO复用
  4. 信号驱动IO

同步IO/异步IO:区别在于第二阶段是否发生阻塞

同步和异步IO 阻塞和非阻塞IO

同步IO/异步IO:
同步是用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行。
异步是用户进程发起IO请求后仍需要继续执行,当内核IO操作完成后会通知用户线程,或者调用用户线程注册的回调函数。

阻塞IO/非阻塞IO:

阻塞是指IO操作需要彻底完成后才能返回用户空间。
非阻塞是指IO操作被调用后立即返回一个状态值,无需等待IO操作彻底完成。

同步/异步(线程间调用)

同步与异步是对应于调用者与被调用者,他们之间是线程之间的关系,两个线程之间只有同步与 异步之分
同步操作时,调用者需要被等待者返回结果,才会进行下一步操作。
异步操作时,调用或者无需等待被调用者返回调用,即可进行下一步操作,被调用者依靠事件、回调等级制来通知调用者结果。

阻塞/非阻塞(线程内调用)

阻塞与非阻塞是对于同一个线程来说,在某个时刻,线程只有两种状态,阻塞与非阻塞。
阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。
非阻塞调用值得是在不能立刻得到结果之前,该调用不会阻塞当前线程。

同步/异步调用、线程、通信

同步:两种内容通过一个机制实现步调一致。
异步:两张内容不需要实现步调一致。

1>同步调用/异步调用

(对调用结果的不同处理)
同步调用一旦返回就能知道结果
异步调用返回时不一定得到结果,需要其他机制获取结果(通知、状态、回调函数)

2>同步线程/异步线程

同步线程:两个线程步调一致,快的阻塞等待慢的。
异步线程:步调无需一致,各线程独立不受影响。

3>同步通信/异步通信

同步通信:发送方和接收方通过一定的机制实现手法不掉协调。
异步通信:发送方接收方独立,各自不受影响。

同步阻塞/同步非阻塞/异步阻塞/异步非阻塞

1>发送方发送请求后等待响应。
接收方处理请求时进行的IO操作如果不能马上等到返回结果,就一直等到返回结果后,才响应发送方。

2>发送方发送请求一直等待响应。
接收方处理请求时进行的IO操作如果不能马上得到结果,立即返回,去做其他事情。
没有得到请求处理结果,不响应发送方,发送方一直处于等待。
IO操作完成后,将完成状态和结果通知接收方,接收方再响应发送方,发送方才能进入下一次请求过程。

3>发送方向接收方请求后,不必等待响应,可以继续其他工作。
接收方处理请求时进行IO操作如果不能马上得到结果,就一直等到返回结果后,才响应发送方。

4>发送方向接收方请求后,不等待响应,可以继续其他工作。
接收方处理请求时进行IO操作如果不能马上得到结果,返回去做其他事情。
当IO操作完成之后,将完成状态和结果通知接收方,接收方再响应发送方。
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    请登录后查看评论内容