在执行时间为(100ms-900ms)的每个查询中执行堆和计算密集型流程时,在nio与bio方面的权衡经验是什么?
答案 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。相关链接:
答案 2 :(得分:1)
除非您发送或接收大量数据,否则CPU占主导地位将占主导地位。 java.nio比java.io更难使用(JDK 7中的异步I / O介于两者之间)。如果数据量超过缓冲,那么您可能希望在不同的线程中执行I / O.