Mar*_*ius 14 java networking multithreading nio
我正在编写多人游戏的服务器端网络.该游戏是一款RPG,它拥有2000名玩家的绝对最大容量,但它实际上最多可以达到300名玩家,尽管它可能更高或更低.时间最长的,每次我不得不这样做网络它涉及大量客户端的时候,我一直坚持着NIO,因为它并不需要使用数百个线程的.最近,我遇到了一个PowerPoint演示文稿,它详细描述了这两个模型,它几乎使得每个客户端的模型看起来优于NIO.我还发现了一些地方,它表明老IO实际上也可以超越NIO.
PowerPoint可以在这里找到(它有点旧):http://www.mailinator.com/tymaPaulMultithreaded.pdf.
我还没有写任何内容,所以如果我不得不改变整个网络设计,那么从一开始就不会有问题.我没有时间压力.最初,我正在使用NIO设计反应器模式实现(选择一个事件,调度一个处理事件的处理程序).
更多信息可以在这里找到:http://en.wikipedia.org/wiki/Reactor_pattern
我的整个reactor实现旨在使用单个线程.由于我读到旧的IO可以超越,它实际上让我处于两难境地.我并不想设计一个使用多线程只是把所有的CPU功率的充分利用复杂的NIO系统,但我也畏缩在具有单一的应用程序中使用线程300+的想法.哪种设计适合我的目的?每个客户端的线程优势在于它本质上真正使用了所有CPU功能,但同时也使系统陷入困境.更不用说,单个线程的堆栈大小占用了大量内存(乘以几百倍).我应该坚持反应堆模式吗?
我知道这个问题是有点暧昧,但我觉得我需要特别提出一个问题,我的情况,因为我无法找到这个网站,也不是一个网站,它解决了我的排序问题的问题.有一个关于游戏,但该游戏旨在处理成千上万的玩家.
非常感谢!如果您需要任何澄清,请询问!
Gra*_*ray 10
我不想设计一个复杂的NIO系统,只使用多个线程来充分利用所有的CPU能力,但我也畏惧让一个应用程序使用300多个线程的想法.哪种设计适合我的目的?
我们的JVM连续运行500多个线程(现在它们位于~700),并且在1000秒内达到峰值.我认为没有理由认为800线程在某种程度上"畏缩"值得.当你达到10,000个线程(作为球场号码)时我会开始担心 - 如果你在32位以下运行,可能会更少.当你进入1000s时,你肯定会分配更多的内存,但是1k线程以下的任何东西都不应该是个问题.这是一个关于线程创建数字的好页面.
当您与不常见的IO 有大量连接时,NIO效率最高.它解决了很多问题,当涉及到异步通信,有一些事情是你可以用NIO做"老IO"不能从功能的角度做(中断通道和非阻塞IO为例),但单个线程处理程序一个更简单的模型,我并不惊讶它在许多配置中可以胜过NIO实现.使用NIO,您在Java代码中执行了大量操作,这些操作是在JVM中完成的,甚至是本机代码中的内核.流的多路复用和就绪IO的处理都是"免费"(就复杂性而言)使用"旧IO"模型获得的所有内容.
我会保持简单并坚持每个客户端的线程模式,直到你有充分的理由去攻击复杂性.
| 归档时间: |
|
| 查看次数: |
1970 次 |
| 最近记录: |