在码头使用NIO和BIO的优势?

时间:2008-12-27 17:34:04

标签: java jetty nio

在执行时间为(100ms-900ms)的每个查询中执行堆和计算密集型流程时,在nio与bio方面的权衡经验是什么?

3 个答案:

答案 0 :(得分:2)

真正的问题是,您希望能够扩展到每个物理服务器的并发开放连接数量(例如,支持服务器消息传递推送ala Comet模式 - 以及这些天谁不想这样做?) 。 NIO将让您真实地进入10,000到20,000范围。从OS实现的角度来看,线程是一种非常昂贵的资源(每线程内存消耗和上下文切换开销)。因此,可以使用适度的线程池来维持数千个NIO连接。

使用像MINA这样的NIO框架,滚动NIO也不错。 (实际上非​​常简单。)我已经推出了自己的NIO,然后还加入了MINA。 MINA是一个很好的方式。

http://mina.apache.org/testimonials.html

  

EURid在抢劫期间使用了MINA   对于7月的.eu域名   2006年4月。超过700.000域名   名字在第一次登记   4个小时。一小时后,MINA就有了   处理了超过50万的SSL   连接。

     

我们找到了速度和稳定性   MINA非常出色。虽然我们   我们发现,仍在使用MINA 0.8.1   API非常优雅和简单。

答案 1 :(得分:2)

你应该记住的一件事是,有一些关于JIO for NIO的错误的报告,这会导致Jetty挂起并使用100%的CPU。所以,就目前而言,如果你看到这种行为,我建议你留在BIO。相关链接:

http://jira.codehaus.org/browse/JETTY-937

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6403933

答案 2 :(得分:1)

除非您发送或接收大量数据,否则CPU占主导地位将占主导地位。 java.nio比java.io更难使用(JDK 7中的异步I / O介于两者之间)。如果数据量超过缓冲,那么您可能希望在不同的线程中执行I / O.