其实在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类的静态成员,并进行初始化赋值。