当前位置: 首页 > 面试题库 >

如何选择Java Nio vs io?

司马高昂
2023-03-14
问题内容

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


问题答案:

恕我直言,阻塞IO通常是最简单的使用方法,除非您有特定的要求,而这又需要系统中的更多要求,否则您应该坚持最简单的选择。

下一个最简单的选择是阻止NIO,如果我想要比IO更高的效率或控制能力,我通常会更喜欢它。它仍然相对简单,但是允许您使用ByteBuffers。例如,ByteBuffers支持little
endian。

一个常见的选择是将非阻塞NIO与选择器一起使用。这种引入的许多复杂性可以通过诸如Netty或Mina之类的框架来处理。我建议您在 需要
非阻塞IO的情况下使用此类库,例如,因为每个服务器有数千个并发连接。恕我直言,您有成千上万个连接,除非每个连接所做的工作都很琐碎,否则应该考虑拥有更多服务器。AFAIK谷歌去更多的服务器而不是每个服务器数千个用户

更为极端的选择是使用NIO2。它比非阻塞NIO更加复杂和冗长。我不知道有什么框架可以很好地支持这一点。即,实际上,这样做时速度更快。AFAIK如果您拥有Infiniband(这是设计要支持的功能),那么这似乎值得使用,但如果您具有以太网,则可能不值得使用。



 类似资料:
  • 我想调用一个函数时,选择的任何选项。类似于这样: 但不知何故不起作用。有人能帮忙吗。 请注意 我不想捕获更改事件,如果我选择已经选择选项,则不会触发更改事件

  • 问题内容: 我想使用的方法获取http://en.wikipedia.org的内容。 我发现en.wikiepdia.org同时具有IPv4和IPv6地址: 如何使用IPv6地址访问该站点? 问题答案: 此jvm参数将起作用。

  • 如果选择选项值是从循环中提取的,那么如何禁用该选项值?是否有其他方法解决此问题? 示例输出在循环和我想禁用选项值6和7。谢谢帮忙。

  • 问题内容: 我使用的选择标记的格式允许多次选择,但我希望选择的最大数量为10。使用JavaScript或jquery是否可以? 提前致谢! 问题答案: 这是供您使用的一些完整代码…一定要喜欢Google AJAX API Playground :-) 编辑1: 注意:这只允许您选择5,因为我不想复制/粘贴另外10个选项:-) ​

  • 我有两个表和 names表有以下列表: -男性姓名从nameID 1到nameID 10 -女性姓名从nameID 11到nameID 21 -两者都从nameID 23到nameID 31 性别表有三个属性: -女性 -男性 -两者 我正在使用引导选择选项,我想显示从nameID11到nameid21的名称,如果用户从gender选择选项中选择女性,等等,这是可能的吗?我看到其他帖子,我注意到他

  • 问题内容: 我必须创建一个可自动执行Outlook和Word的应用程序,并且想使用Java来完成该任务。(唯一允许的替代方法是VB6,所以…) 经过Google的快速调查后,我发现了几个库,但不确定使用哪个库: J-Interop SWT 雅各布 COM4J jacoZoom … 我不知道如何比较这些库并做出明智的决定。看来COM4J有点过时了,JACOB泄漏了内存(据说),而jacoZoom是商

  • 设置regionserver和zookeeper仲裁的好做法是什么? 我有一个16个节点的小型hadoop集群。按照http://hbase.apache.org/book/example_config.html中给出的示例,我选择16个节点作为regionserver,并选择这些节点的一个子集作为Zookeeper。 但当一个作业由不在与HBase.zookeeper.quorum对应的列表中的

  • 我将从@Embeddeble Class Certification中选择所有列。但我不能选择它。如何选择可嵌入类。 @嵌入式类认证 如果运行ResultService,则会出现以下异常: 原因:Java . lang . illegalargumentexception:在EntityManager中创建查询时出现异常:异常描述:编译查询时出错[从认证c中选择c]。未知的实体类型[认证]。 如何