【发布时间】:2011-06-12 17:37:51
【问题描述】:
非阻塞 Java NIO 是否仍然比每个连接异步套接字的标准线程慢?
此外,如果您要为每个连接使用线程,您会创建新线程还是使用非常大的线程池?
我正在用 Java 编写一个 MMORPG 服务器,它应该能够在足够强大的硬件条件下轻松扩展 10000 个客户端,尽管客户端的最大数量是 24000(我认为每个连接模型的线程不可能达到,因为Java 中的 15000 个线程限制)。 从一篇三年前的文章中,我听说每个连接模型使用一个线程阻塞 IO 仍然比 NIO 快 25%(即这篇文档http://www.mailinator.com/tymaPaulMultithreaded.pdf),但是今天还能达到同样的效果吗?从那时起,Java 发生了很大变化,我听说在比较现实生活场景时结果是有问题的,因为使用的 VM 不是 Sun Java。 另外,因为它是一个有许多并发用户相互交互的 MMORPG 服务器,使用同步和线程安全实践是否会降低性能,以至于服务 10000 个客户端的单线程 NIO 选择器会更快? (不需要所有的工作都必须在带有选择器的线程上处理,它可以像 MINA/Netty 的工作方式一样在工作线程上处理)。
谢谢!
【问题讨论】:
-
10k 线程对任何(commodity)服务器来说都不是赢家 :-) 此外,单个机器上的 10k 个活动客户端非常...不太可能。
-
@pst:如果你的意思是商品;非量子,尚未被发现的技术,我完全同意。我认为凯文最小的问题是线程数。对于没有就此事提供任何有用的意见,我深表歉意。还要记住 QOTD:测试。
-
@pst 哦,甜蜜的 JRE 它的弹性!你让我的一天变得有价值。
-
@Captain Giraffe 我迷路了:-/
标签: java multithreading asynchronous nio nonblocking