我正在为一个相当大的模拟创建一个Java服务器,我有几个高级设计问题。
一些背景:
目前,我对服务器中的线程模型有以下想法:
对于少数客户,我认为这会很好。
问题1:这种线程模式是否适用于大量(数千)连接的客户端?我不太熟悉这样一个Java实现中的内存/CPU开销。
问题2:我希望避免让服务器异步地向客户端发送消息,但在某些情况下,我可能需要让服务器异步地向一些或多个客户端发送“立即更新”消息,而我不太确定如何做到这一点。让模拟逻辑线程发送这些消息似乎不对.也许是一些“客户通知线程池”的概念?
发布于 2016-08-08 20:43:58
你问两个问题,我回答第一个问题。
我以前写过一个应用程序,其中包含了一个应用程序中的数千个线程。我们曾经遇到Linux服务器上最大线程数的问题;对我们来说,限制大约是1000个线程。这影响了我们的Java应用程序,因为Java线程使用本机线程。我们将限制设置得更高,应用程序扩展到大约2000个线程,这是我们所需要的,没有问题;我不知道如果我们需要更高的比例,会发生什么。
默认的最大线程数为1000个这一事实表明,在单个Linux服务器上运行过多的数千个线程可能是不明智的。我认为主要的问题是,需要为每个线程分配足够的堆栈内存。
我们的长期解决方案是更改为线程池中的线程服务于多个套接字的体系结构。这并不是什么大问题;对于每个套接字,线程只需在进入下一个套接字之前处理任何挂起的消息。您必须小心同步内存访问,但是您的应用程序已经需要这样做了,因为您的模拟已经与多个线程交互了,所以这个部分不会发生很大的变化。
https://stackoverflow.com/questions/38836279
复制相似问题