NioServerSocketChannel 、NioSocketChannel使用一个静态的成员变量来存放provider的原因

其实在JavaDoc标明的https://github.com/netty/netty/issues/2308中给出了一个的解释

并基于Netty4.0.18版本中给出了解释。

Currently SelectorProvider#provider (which contains synchronized block) called for every new channel creation. 
This can can cause unnecessary blocking when application creates a lot of connection (performance penalty about 1% 
when creating 5000 connections/second).
当前的SelectorProviderde provider方法,这个方法包含了一个同步代码块,每创建一个新的channel都会去调用这个方法,执行里面的同步代码块。
当应用创建许多的连接的时候,这个会导致不必要的阻塞,每秒创建5000个连接的时候,性能会下降1%
Possible solution is to store result of #provider and call java.nio.channels.spi.SelectorProvider#openSocketChannel directly, 
without SocketChannel#open.
可能的解决方案是存储provider方法的结果,然后直接用selectorProvider的openSocketChannel创建channel,而不是使用SocketChannel的open方法。
所以在Netty最近的版本中,确实对这个方案进行了实现,将provider直接设置成SocketChannel类的静态成员,并进行初始化赋值。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值