admin 管理员组文章数量: 887016
io
参考 unix网络编程 chapter6.2 I/O models,windows网络编程
1,----------------------理论: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)
暂不解释
2,----------------------java 中的应用:(个人感悟2015-03-12 22:26)
1,传统IO(Old IO):所有的socket链接(线程),两步都阻塞(数据等待+数据拷贝)。
2,NIO(new IO):不是noblocking IO,是 multiplexing I/O。只有selector一处(一个线程)阻塞( 数据等待),
所有的socket链接(线程)只在数据拷贝处阻塞。
java代码中的noblocking是对所有socket链接,数据等待这一步的阻塞,转移给了selector,最多是局部的noblocking,炒作之嫌更大。
- 查看图片附件
本文标签: io
版权声明:本文标题:io 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1688248313h197009.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论