我不想设计一个复杂的NIO系统,该系统使用多个线程只是为了充分利用所有CPU能力,但是我也想让一个应用程序使用300多个线程。哪种设计最适合我的目的?
我们的JVM连续运行着超过500个线程(现在,它们的数量约为700个),峰值在1000多个。我认为没有理由认为800线程在某种程度上值得“挑战”。当您达到10,000个线程(作为停球数目)时,我会开始担心-
如果您在32位以下运行,可能会更少。当进入1000年代时,您当然将不得不分配更多的内存,但是1k线程以下的任何东西都不应该成为问题。这是有关线程创建编号的好页面。
当您拥有 大量
不经常使用IO的连接时,NIO效率最高。它解决了异步通信方面的许多问题,并且您可以使用NIO做一些事情,从功能的角度来看,“旧IO”无法做到(例如可中断通道和非阻塞IO),但是单线程处理程序是一个更简单的模型,在许多配置中它可以胜过NIO实现,对此我并不感到惊讶。使用NIO,您可以在Java代码中执行很多操作,而这些操作是在JVM中甚至在本机代码中的内核中完成的。流的复用和就绪IO的处理都是使用“旧IO”模型“免费”获得的(就复杂性而言)。
我会保持简单,并坚持使用“每个客户端线程”模式,直到您有充分的理由应对复杂性问题为止。



