1.同步io(synchronousio):
同步和异步,这两个概念与消息的通知机制有关。也就是同步与异步是从消息通知机制角度来说的。
举例来说,当funcA 调用 funcB时,funcA必须等待funcB执行完成返回后,funcA才会继续执行,二者保证顺序执行
2.异步io(asynchronous io):
异步跟同步恰恰相反,当funcA调用funcB时,funcB直接返回,并没有返回结果,当funcB执行完成后,通过(状态),(通知),(回调)来通知funcA。即当funcA发出funcB的消息通知后,funcB的执行就和funcA无关了,二者执行顺序是无法保证的。
3.阻塞io (blocking io):
阻塞和非阻塞, 这两个概念与(程序在等待消息通知)时的状态有关。
怎么理解这个等待消息时候的状态呢,当线程发出一个消息通知后,这个消息可能是同步,也可能是异步的,这个时候,当前线程在等待这个消息的通知时就处于等待消息的状态中,这个时候,当前线程如果选择阻塞状态,那么就是线程挂起。
所以这种阻塞状态,同时就对应有同步阻塞,异步阻塞。
同步阻塞:当funcA调用funcB时,当前调用线程处于挂起状态,不执行其他业务,等待funcB,直到funcB执行完毕返回结果,当前调用线程才继续执行
异步阻塞:当funcA调用funcB时,当前调用线程处于挂起状态,不执行其他业务,等待funcB,funcB直接返回,没有返回结果,当前调用线程继续执行,当funcB执行完成后,通过状态,通知,回调来通知调用者。
4.非阻塞IO(non-blocking IO)
非阻塞对应于阻塞,即在等待消息返回的时候,当前线程仍然能处理其他业务
同步非阻塞:当funcA调用funcB时,当前调用线程处于激活状态,可以执行其他业务,同时等待funcB,直到funcB执行完毕返回结果后,funcA继续执行
异步非阻塞:当funcA调用funcB时,当前调用线程处于激活状态,可以执行其他业务,同时等待funcB,funcB直接返回,没有返回结果,funcA继续执行,当funcB执行完成后,通过状态,通知,回调来通知调用者。
所以这种阻塞状态,同时就对应有同步非阻塞,异步非阻塞。
5.多路复用IO(multiplexing IO)
I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作,
目前支持I/O多路复用的系统调用有 select,pselect,poll,epoll
6.信号驱动式IO(signal-driven IO)
信号驱动式I/O是指进程预先告知内核,使得当某个描述符上发生某事时,内核使用信号通知相关进程。