阻塞-非阻塞-同步-异步

来源:互联网 发布:数据 分析 清洗 工具 编辑:程序博客网 时间:2024/06/14 20:11

1.同步与异步
同步和异步关注的是消息通信机制。
同步,就是在发出一个调用时,该调用就不返。但是一旦返回,就得到这个返回值。调用者主动等待这个调用结果。同步过程中,触发IO操作并等待或者轮询的去查看IO操作是否完成。

异步则相反,调用发出之后,这个调用就直接返回了,没有返回结果。当一个异步过程调用发出后,调用者不会立即得到结果,而是在调用发出后,被调用这通过状态通知来转告调用者,后者通过回调函数处理该调。异步过程中,触发IO后直接返回,做自己的事情,IO完成交给内核完成,完成后内核通知进程IO完成。

2.阻塞与非阻塞
阻塞和非阻塞关注的是程序在等待调用结果(消息 ,返回值)时的状态。
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只要在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前进程。

在处理IO的时候,阻塞和非阻塞都是同步IO。
只有使用了特殊的API才是异步IO。
这里写图片描述

对于UNIX:阻塞式I/O,非阻塞式I/O(nonblock),I/O复用都属于同步I/O。因为它们在数据由内核空间复制回进程缓冲区时都是阻塞的(不能干别的事)。只要异步I/O模型(AIO)是符合异步I/O操作的含义,即在1数据准备完成,2由内核空间拷贝回进程缓冲区后 通知进程,在等待通知的这段时间可以干别的事。

0 0
原创粉丝点击