系统I/O 可分为阻塞型, 非阻塞同步型、阻塞异步型以及非阻塞异步型。
阻塞型I/O意味着控制权只到调用操作结束了才会回到调用者手里。
同步非阻塞是会立即返回控制权给调用者的。调用者不需要等等,它从调用的函数获取两种结果:
要么此次调用成功进行了;
要么系统返回错误标识告诉调用者当前资源不可用,你再等等或者再试度看吧。
比如read()操作, 如果当前socket无数据可读,则立即返回EWOULBLOCK/EAGAIN,告诉调用read()者”数据还没准备好,你稍后再试”。
异步非阻塞调用中,稍有不同。调用函数在立即返回时,还告诉调用者,这次请求已经开始了。系统会使用另外的资源或者线程来完成这次调用操作,并在完成的时候知会调用者(比如通过回调函数)。POSIX的aio_read()来说,调用它之后,函数立即返回,操作系统在后台同时开始读操作。即是将工作交给了内核去完成这个操作。
在以上三种IO形式中,非阻塞异步是性能最高、伸缩性最好的。
两种IO多路复用方案:Reactor and Proactor(基于同步和基于异步)
一般情况下,I/O 复用机制需要事件分享器(event demultiplexor)。 事件分享器的作用,即将那些读写事件源分发给各读写事件的处理者,</