netty ChannelFuture

在Netty中所有的io操作都是异步的,这也就是意味任何io访问,那么就立即返回处理,并且不能确保
返回的数据全部完成。因此就出现了channelFuture,channelFuture在传输数据时候包括数据和状态两个
部分。他只有Uncompleted和Completed, 既然netty io是异步的,那么如何知道channel传送完成有两种方式,一种添加监听器addListener(ChannelFutureListener) 还有一种直接调用await()方法,这两种方式有下面的区别:

监听器:
是以事件模式的,因此代码就需要用事件模式的样式去写,相当复杂,但他是non-blocking模式的性能方面要比await方法好,而且不会产生死锁情况
wait():
直接方法调用,使用简单,但是他是blocking模式,性能方面要弱而且会产生死锁情况
 
不要在ChannelHandler 里面调用await(),这是因为通常在channelHandler里的event method是被i/o线程调用的(除非ChannelPipeline里面有个ExecutionHandler),那么如果这个时候用await就容易产生死锁。


io write() 之后并不直接写数据, 而是将数据写入一个队列, 然后返回. 由worker线程取出, 执行写操作, 成功后发送事件, 也就调用了你的那个 Listener,所以doSomething() 也是在worker线程执行的.



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值