代码改变世界

阻塞/非阻塞、异步/同步的区别

2016-10-13 14:34  guaguahu  阅读(149)  评论(0编辑  收藏  举报

1、同步和异步关注的消息通信机制:

   同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发I/O操作并等待或者轮询的去查看I/O操作是否就绪,而异步是指用户进程触发I/O操作以后便开始做自己的事情,而当I/O操作已经完成的时候会得到I/O完成的通知。

     例如:拥有文件句柄的进程能够实时收到内核发给他的SIGIO信号。

 

2、阻塞和非阻塞:

    阻塞和非阻塞是针对于进程在访问数据的时候,根据I/O操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作函数的实现方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。(例如:

进程对于文件指针的读写操作不会阻塞于buffer为空的情况。)

     对于unix来讲,阻塞式I/O,非阻塞式I/O,I/O复用(select、pool、epoll)都属于同步I/O,因为他们在数据由内核空间复制回用户空间的进程缓冲区

     时是阻塞的,只有AIO是完全符合异步I/O要求的。即:数据准备完成,由内核空间拷贝回缓冲区后再通知进程。