如何选择java nio vs io?

2022-09-01 13:02:33

正如我们所知道的,如果我们想使用传统的IO来构建服务器,它必须在某个地方阻塞,所以我们不得不使用循环或一线程一套接字模式,所以nio似乎是更好的选择。所以我想知道nio是否是永远更好的选择?


答案 1

恕我直言,阻止IO通常是最容易使用的,除非您有对系统有更多要求的特定要求,否则您应该坚持使用最简单的选项。

下一个最简单的选择是阻止NIO,如果我想要比IO更有效或更能控制的东西,我通常更喜欢NIO。它仍然相对简单,但允许您使用ByteBuffers。例如,字节缓冲器支持小端序。

一个常见的选择是将非阻塞NIO与选择器一起使用。这带来的大部分复杂性都可以由Netty或Mina等框架来处理。如果您需要非阻塞IO,我建议您使用这样的库,例如,因为每个服务器有数千个并发连接。恕我直言,您有数千个连接,您应该考虑拥有更多服务器,除非每个连接的作用非常微不足道。AFAIK谷歌去更多的服务器,而不是每个服务器成千上万的用户。

更极端的选择是使用NIO2。这比非阻塞NIO编写更复杂,更冗长。我不知道有任何框架可以很好地支持这一点。AFAIK 如果你有Infiniband(这是它旨在支持的东西),这似乎值得使用,但如果你有以太网,也许不值得使用。


答案 2

如果你想要非阻塞IO,NIO不是更好的选择,它是Java中一的选择。请记住,人们仍然经常使用旧的IO,因为它更容易编码。NIO API非常原始,更像是一种支持低级技术,而不是客户端API。我建议通过API使用NIO,该API为使用非阻塞IO要解决的问题提供了更简单的接口。


推荐