BIO NIO AIO

2016-09-12  本文已影响31人  chandarlee

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

同步、异步

同步、异步主要是指应用程序和操作系统之间的交互方式。应用程序通过系统调用读写Socket时,如果当前数据没有准备好(需要从系统内核将数据拷贝到应用程序内存空间这一IO操作),如果应用程序一直在系统调用处挂起等待IO操作完成,那么就是同步IO。反之,如果不挂起,而是立马返回,等到IO操作完成之后通知应用程序,那么就是异步的IO。

阻塞、非阻塞

对一个文件描述符指定的文件或设备, 有两种工作方式: 阻塞与非阻塞。所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待状态, 直到有东西可读或者可写为止。而对于非阻塞状态, 如果没有东西可读, 或者不可写, 读写函数马上返回, 而不会等待。缺省情况下, 文件描述符处于阻塞状态。

在网络传输中,这个文件描述符指代某一个socket,socket有阻塞和非阻塞的工作方式。

同步、异步指的是调用的方式,同步调用返回调用结果,而异步调用不会立刻返回调用结果,而是在某一时刻通过回调或者其他方法通知调用方并返回调用结果。
阻塞和非阻塞指的是等待调用结果时的状态。阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

Linux IO模式及 select、poll、epoll详解

上一篇下一篇

猜你喜欢

热点阅读