Java多线程网络,好还是坏?

时间:2014-03-20 21:24:55

标签: java multithreading sockets

我运行多个游戏服务器,我想开发一个自定义应用程序来管理它们。基本上所有游戏服务器都将连接到应用程序以交换数据。我不希望任何这些数据丢失,所以我认为最好使用TCP。我已经研究过网络并了解它是如何工作的但是我对cpu的使用有疑问。正在增加更多服务器,并且在未来几个月内它可能会达到100到200左右,并将根据需要继续增长。每个服务器的新线程是否会使用大量的cpu,这样做是个好主意吗?有没有人对如何解决这个问题有任何建议?谢谢。

2 个答案:

答案 0 :(得分:4)

你应该看看非阻塞io。使用阻塞io,每个套接字将占用1个线程,并且系统中的线程数量是有限的。即使你可以创造1000+,这也是一个值得怀疑的方法。

使用非阻塞io,您可以使用单个线程服务多个套接字。这是一种更具伸缩性的方法+您可以控制在任何给定时刻运行的线程数。

答案 1 :(得分:0)

  

正在添加更多服务器,并且在未来几个月内它可能会达到100到200左右,并将根据需要继续增长。每个服务器的新线程是否会使用大量的cpu,这样做是个好主意吗?

谨慎对待100多个线程和NIO解决方案。但是,值得注意的是,NIO方法的实现要复杂得多。从代码的角度来看,将与服务器连接的交互隔离到单个线程有其优势。

现代操作系统'除了堆栈内存之外,可以用很少的开销来分叉1000个线程。如果您确定您的缩放因子(即您不会达到10k连接或其他东西)并且您拥有核心内存,那么我会说每个TCP连接的一个线程可以很好地工作。我已经非常成功地运行了具有1000个线程的应用程序,并且由于上下文切换(以前的处理器/内核的情况)已经没有出现性能下降。