http://www.ibm.com/developerworks/cn/linux/l-async/
同步阻塞 I/O ------ read/write
同步非阻塞 I/O ------ read/write(o_nonblock)
- 在非阻塞状态下,recv() 接口在被调用后立即返回,返回值代表了不同的含义。
- recv() 返回值大于 0,表示接受数据完毕,返回值即是接受到的字节数;
- recv() 返回 0,表示连接已经正常断开;
- recv() 返回 -1,且 errno 等于 EAGAIN,表示 recv 操作还没执行完成;
- recv() 返回 -1,且 errno 不等于 EAGAIN,表示 recv 操作遇到系统错误 errno。
异步阻塞 I/O
- select、pselect、poll、ppoll、epoll
- 有很多高效的事件驱动库可以屏蔽上述的困难,常见的事件驱动库有 libevent 库,还有作为 libevent 替代者的 libev 库。
异步非阻塞 I/O
- Linux provides a threads-based implementation of POSIX AIO within glibc.
- AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果。