阻塞:可认为等同于挂起
非阻塞:可认为等同于不挂起,执行了就返回了。
阻塞IO:IO操作如果没有完成会一直挂起,使该进程或者线程进入休眠状态;
非阻塞IO:IO操作执行之后会立即返回,不会使进程或者线程进入休眠状态,如果没有完成,会返回返回错误;
同步:同步想表达的是这样一种情形,呃,只能写个各个博客惯用的例子描述:我想找lucy,打电话找不到,我就一直打,当然
我也会尝试发短信,或者去她上班的地方堵她,强调的是我在找到她之前一直在找她,这个是重点。
异步:异步说的是我找lucy,打电话没有接,但是有一个通用约定,电话有未接来电,她看到了会给我回复,我就干其他事情
了, 重点是她会通知我,同步是我一直找,也就是异步更想说的是有一个结果通知机制。
IO多路复用:放在后面说。
同步阻塞IO: IO本身是非阻塞的,会在某个时刻阻塞当前进程或者线程的IO方式,直到有IO读写为止,进程也是阻塞着的。
同步非阻塞IO:IO本身是非阻塞的,但是调用者没有拿到完全的数据,所以一直会请求,直到数据拿完,
和同步阻塞IO的区别是:多了一个选择,我在多次拿的时候可以有干其他事情的选择,当然干了其他事情网络吞
吐会有影响。
异步阻塞IO:异步还是按照上面说的来理解,只是说获取想要的东西的一种方式,阻塞IO,这里指的是系统调用是阻塞的,
但是IO本身是不阻塞的,那么这个其实就指的是:poll select epoll这些我们常说的IO多路复用功能,也就是
可用认为IO多路复用等同于异步阻塞IO,只是叫法不一样。
异步非阻塞IO:对比与异步阻塞IO,区别就是:异步阻塞IO会有一个系统调用来阻塞着等待IO的通知,异步非阻塞IO没有这个阻
塞,在Linux上面主要就说的是内核提供的libaio,可以有回调或者信号来把结果通知到调用者,但是比如nginx读
取文件,使用了libaio,但是又把aio通过eventfd整合到epoll里面了,也就是可以理解成又到了异步阻塞IO,但还
有不同点,异步阻塞IO那里说的IO是非阻塞的,指的是socket,这里的libaio指的是regular file。
如有错误或者不完整的欢迎各位留言补充