当前位置: 首页 > 面试题库 >

每个连接模型的Java线程与NIO

高锦
2023-03-14
问题内容

每个连接异步套接字的非阻塞Java NIO仍然比标准线程慢吗?

另外,如果要在每个连接中使用线程,是仅创建新线程还是使用很大的线程池?

我正在用Java写一个MMORPG服务器,如果有足够强大的硬件,它应该能够轻松扩展10000个客户端,尽管最大客户端数量是24000(由于15000个线程,我认为每个连接模型的线程都无法达到)
Java中的限制)。从三年前的一篇文章中,我听说每个连接模型使用线程阻塞IO仍比NIO快25%(即,该文档http://www.mailinator.com/tymaPaulMultithreaded.pdf),但这一天仍然可以实现吗?自那时以来,Java发生了很大的变化,而且我听说比较现实生活中的情况时,结果令人怀疑,因为所使用的VM不是Sun
Java。另外,由于这是一台MMORPG服务器,同时有许多并发用户相互交互,使用同步和线程安全实践是否会使性能降低到可以为10000个客户端提供服务的单个线程NIO选择器更快的程度?(不必使用选择器在线程上处理所有工作,可以在工作线程上进行处理,例如MINA
/ Netty的工作方式)。

谢谢!


问题答案:

NIO的好处应该与盐一起服用。

在HTTP服务器中,大多数连接是保持活动的连接,大多数情况下它们是空闲的。为每个线程预分配一个线程会浪费资源。

对于MMORPG,情况大不相同。我想连接一直在忙于接收来自用户的指令并将最新的系统状态发送给用户。大多数情况下,连接需要线程。

如果使用NIO,则必须不断为连接重新分配线程。对于简单的每连接固定线程解决方案,它可能是劣等的解决方案。

默认线程堆栈大小非常大,为(1/4 MB?),这是为什么只能包含有限线程的主要原因。尝试减少它,看看您的系统是否可以支持更多。

但是,如果您的游戏确实非常“忙”,则最需要担心的是CPU。不管是不是NIO,要在机器上处理成千上万的超级活跃游戏玩家真的很困难。



 类似资料:
  • 问题内容: 您能否解释一下已经在各种servlet实现中实现的两种方法: 每个连接线程 每个请求的线程 以上两种策略中的哪一种可以更好地扩展,为什么? 问题答案: 以上两种策略中的哪一种可以更好地扩展,为什么? 每个请求线程的可伸缩性比每个连接线程的可伸缩性更好。 Java线程非常昂贵,通常每个线程都使用1Mb的内存段,无论它们是活动的还是空闲的。如果为每个连接提供自己的线程,则该线程通常在连接的

  • 给stackoverflow社区的人们。我正在寻找一些帮助,以解决HikariCP连接池面临的问题。 高级:我正在尝试使用线程池创建多个线程,我的计划是为每个工作线程提供独立于HikariCP的连接,但HikariCP所做的是在多个线程之间共享一个公共连接。我正在使用 以检索DB连接。现在,当我关闭一个连接时,我在其他线程中看到问题,说连接关闭了,线程正在处理的批次记录被丢弃。 以下是我的日志文件

  • 问题内容: 我正在创建一个多线程应用程序。但是,当我有一个为所有线程服务的连接对象时,我的应用程序遇到了许多意外行为。 我处于两难境地。我应该让每个线程创建,使用和处置其自己的连接对象还是应该使用连接池? 我已经尝试过连接池,这会使应用程序痛苦地洗澡。但是,我的直觉是,如果让每个线程创建自己的连接对象,则可能会出现“连接过多”错误。 请让我知道是否有任何方法可以帮助您。 问候。 问题答案: 无论线

  • 问题内容: 什么是监视数据库连接的最佳/良好/最佳方式。我正在编写秋千应用程序。我想要做的是每隔一段时间检查一次与数据库的连接。我已经尝试过这样的事情。 但这是行不通的。我想到的第二个问题是此会话关闭将如何影响其他查询。 问题答案: 使用连接池,例如c3p0或dbcp。您可以将此类池配置为监视池中的连接- 在将连接传递给Hibernate之前,将其返回或定期接收之后。如果连接断开,则透明地将其关闭

  • 1“如何确保线程按特定顺序执行”这个问题的答案是正确地使用join()方法(参考:http://beginnersbook.com/2015/03/thread-join-method-in-java-with-example/). 2 15.5中的一个问题在下面的CiCt第6版中按顺序调用。 假设我们有以下代码: “同一个Foo实例将传递给三个不同的线程。线程A将首先调用,线程B将调用第二个,线

  • 问题内容: 我一直在使用库在C中创建和加入线程。 什么时候应该从一开始就创建分离的线程?与可连接线程相比,它具有任何性能优势吗? 不在可连接(默认)线程上执行合法操作吗?还是这样的线程应该在使用之前始终使用该函数? 问题答案: 当您知道不想等待时,创建一个分离线程。唯一的性能好处是,当分离的线程终止时,可以立即释放其资源,而不必等到线程加入后才可以释放资源。 不加入可连接的线程是“合法的”。但是通