【问题标题】:Netty - The best way to send message concurrently in javaNetty - 在 java 中并发发送消息的最佳方式
【发布时间】:2016-01-18 17:46:34
【问题描述】:

我有 150 个线程。

每个线程都有Netty Client并连接到服务器。

我应该使用更多的 150 个线程来发送吗?

我应该使用 75 个线程发送吗?

我应该不使用线程发送吗?

我的本​​地测试没有意义。 (50岁以上不能操作服务器)

请帮帮我。

【问题讨论】:

  • 为什么有150个线程? Netty 仅使用AMOUNT_OF_PROCESSORS * 2 线程来发送其默认配置。您的高线程数似乎是一个设计问题
  • hmm low 线程在服务器接收数据时导致延迟。
  • 我的意思是......所有数据不会同时出现

标签: java multithreading concurrency netty


【解决方案1】:

这没有黄金法则。根据您的应用程序,您可以找到它;

  • 一个线程一个连接就足以使用机器的所有资源。
  • 使用大约 CPU 数量到 2 * CPU 数量足以使用机器的所有 CPU。
  • 如果您有同步请求(而不是异步请求)和较高的网络延迟,您可能会发现大部分时间都在等待数据,在这种情况下,更多的连接将有助于缓解这种延迟。

我的偏好是允许异步消息/请求,并允许单个连接使用机器上的所有 CPU/资源,因为在现实世界中,当您使用 150 个繁忙连接进行测试时,您可能会获得更好的结果他们可能不会同时或以相同的程度活跃。

【讨论】:

  • 感谢您的回答。客户端的“连接”没有立即激活,但服务器的 writeAndFlush(sending) 几乎同时进行。(50 个客户端)我使用了套接字选项 TCP_NODELAY。感谢您的精彩回答。
  • @bot TCP_NODELAY 最适合低延迟,但您可能会发现它无法获得更高的吞吐量结果(因为它避免合并数据)如果没有此选项,值得测试您的吞吐量。
猜你喜欢
  • 2011-10-10
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
  • 2015-02-04
相关资源
最近更新 更多