日期:2014-05-16  浏览次数:20666 次

io-nio-socket步步为营(七)unix 5种 IO模型

参考?unix网络编程 chapter6.2 I/O models,windows网络编程

?

socket编程主要有两步:

第一步: ? “等待数据”从网络上传到本地。然后将数据包从网络层拷贝到内核的缓存中

-->用户应用进程-->recvfrom-->系统调用-->内核等待网络数据报-->网络数据报准备好(拷贝到内核)?

第二步: ? “拷贝数据”从内核中把数据拷贝到程序的数据区中。?

-->内核拷贝数据到用户应用程序(buffer)-->拷贝完成-->返回调用。

?

?

同步IO和异步IO的区别就在于:应用程序的调用是否立即返回!

阻塞IO和非阻塞IO的区别就在于:数据等待/数据拷贝的时候进程是否阻塞!

?

书中介绍了5种I/O models:

?

blocking I/O

两步全阻塞,并让出CPU,或者出错被系统信号中断。

nonblocking I/O

告诉内核,I/O操作无法完成时,不要将进程睡眠,而是返回一个错误EWOULDBLOCK信号,然后不断的polling轮询,直至正常返回调用

I/O multiplexing (select and ?poll)

阻塞于select()/poll()/epoll()调用,轮询,当返回套接口可读条件时,调用recvfrom拷贝数据到用户应用程序, 好处在于可以轮询多个文件描述符FD

signal driven I/O ( SIGIO)

不解释,没有AIO好

asynchronous I/O (the POSIX ?aio_functions)

暂不解释

?

?