日期:2014-05-16 浏览次数:20666 次
参考?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)
暂不解释
?
?