什么是同步?
A调用B,B完成了所有的操作才返回。
什么是阻塞?
网络IO读写时,没有数据则会阻塞当前线程,使当前线程为挂起状态。
同步阻塞IO:
用户程序调用系统read,如果没有数据则会阻塞当前线程,等待有数据之后才会唤醒线程。
内核完成数据复制操作才会返回;
socket为阻塞类型。
同步非阻塞IO:
用户程序调用系统read,如果没有数据则会立即返回失败,不会阻塞当前线程。
线程不停轮询调用,直到有数据的时候内核完成数据复制操作才会返回
socket为非阻塞类型。
IO多路复用:
线程同时轮询监控多个IO文件,返回可以读取数据的socket,用户线程再读取数据。
基础是Linux的select/epoll查询。
与同步非阻塞IO相比区别在于单线程可以同时监控多个socket,而同步非阻塞IO只能作用于一个。
JAVA的NIO就是这种类型。
异步IO:
用户线程调用时,向操作系统注册自己的回调函数。
内核完成了数据准备就通知用户线程,或者调用用户线程注册的回调函数。
Linux目前尚不完善
网友评论