替代 Java 选择器实现
2022-09-04 04:23:00
我正在编写一个高性能/低垃圾应用程序(微秒级),其中包含一个网络组件。我遇到的一个痛点是Java NIO内置Selector的实现。
一些有问题的事情:
- 大量的对象创建。几乎每次调用 selectedKeys() 都会创建很多对象。迭代器,装箱/取消装箱,你的名字。对于大多数其他情况来说不是问题,但是我正在编写的应用程序需要创建尽可能少的垃圾。
- 层层叠加锁定和同步。在构建选择器Impls时,一堆Java锁原语并不存在。因此,它很笨拙,不是最佳的。在我的用例中,只有一个线程调用,因此锁定实际上是无用的。
select
扩展或更改选择器实现是一个非启动器。大多数类都是最终类,私有和包私有成员位于包中。本机方法也使事情复杂化。sun.nio.ch.*
是否有任何其他更现代的选择器实现可能更高性能?
我检查过的网络库只是在幕后使用内置的Java选择器。任何帮助将不胜感激。