IO分为两个阶段:数据准备阶段以及内核空间复制数据到进程缓冲区阶段
(其中内核空间以及用户空间均属于程序运行的空间,其中进程缓冲区也叫用户空间)
- 阻塞IO/非阻塞IO:区别在于第一步发起IO请求是否会被阻塞
- 传统阻塞IO——如果阻塞直到完成
- 非阻塞IO——不阻塞
同步IO包括:
- 阻塞IO
- 非阻塞IO
- IO复用
- 信号驱动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
请登录后查看评论内容