java nio 高级

非阻塞io:传统的读写会发生阻塞,server/client每个请求产生一个线程,导致线程数量增大

一般采用线程池模型,并且会限制线程池的大小。

非阻塞io采用reactor模式,io调用不会被阻塞,相反会注册感兴趣的特定io事件。(可读数据到达,新的连接建立)

发生特定事件,系统通知。

非阻塞io核心对象是selector,用来注册io事件并且通知事件发生。

当有事件发生时,从selector获取selectorkey。从selectorkey中找出事件和事件发生具体的selectableChannel。

获取客户端发送过来的数据。

二。使用nio编写服务器程序,步骤如下:

向selector对象注册感兴趣的事件,从selector获取感兴趣的事件,根据不同的事件进行相应的处理。

创建serverSocketChannel对象,调用configuringblocking方法,配置为非阻塞模式,向selector注册事件,从selector获取感兴趣的事件

内部循环模式:调用select方法,直到有一个事件发生,调用selectKey方法获取发生事件的selectionkey,在使用迭代器进行循环处理

三。java io和nio区别

阻塞io产生大量线程,带来频繁的上下文切换。

nio:有一个专门的线程处理io分发,事件驱动,事件到时触发不是同步监视。

java nio采用双向通道进行数据传输,而不是单向的流。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值