nio学习笔记一(名词解释)

以读取socket接收缓冲区数据为例

数据状态

a-数据未就绪(网络数据未到tcp缓冲区)-》b-数据已就绪(数据已到tcp缓冲区)-》c-读取数据(从tcp缓冲区到用户缓冲区)-》d-数据读取完成(数据已到用户缓冲区)

几个概念

1、阻塞io:线程t1发起read操作时,上述四个阶段线程会一直等待,直到数据读取完成
2、非阻塞io:线程t1发起read操作,发现数据处于a阶段,不会等待,会立刻返回个错误,过段时间再read,直到数据处于b阶段,然后阻塞完成c和d阶段
3、同步io:线程t1等待完成b-c-d阶段
4、异步io:线程t1发现数据已就绪,发起read操作后,马上返回,由操作系统或另外的线程t2完成c和d阶段,通知t1直接使用数据
5、io多路复用:线程t1通过扫描或者监听事件机制发现多个socket通道中哪些数据可以读取,然后由t1或者其他线程有针对性的读取数据
6、nio:使用了selector,所以肯定是非阻塞,而且必须设置为非阻塞,至于是同步还是异步读取数据,取决于框架或者怎么使用nio,一般使用同步非阻塞比较多
7、select:当channel有感兴趣的事件发生,select函数需要把fd集合从用户态拷贝到内核态,需要遍历内核所有的fd,连接数限制1024
8、poll: 对于连接数没有了限制,其他和select一样
9、epoll:每次调用select,只会拷贝新的事件注册,不会像select一样全部fd拷贝一遍,为每个fd指定一个回调函数,当有事件发生,会触发对应的回调函数,不会像select一样遍历所有fd,当然对连接数没有限制
10、channel和buffer:channel支持异步读写、支持双向读写,必须结合buffer使用,支持阻塞和非阻塞,减少数据拷贝次数,减少内核空间和用户空间的上下文切换次数,buffer使用起来非常灵活

先记录一些概念,后面会更新nio和netty相关文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值