Netty—java中并发发送消息的最佳方式

Netty—java中并发发送消息的最佳方式,java,multithreading,concurrency,netty,Java,Multithreading,Concurrency,Netty,我有150根线 每个线程都有Netty Client,并连接到服务器 我应该使用150多个线程来发送吗 我应该使用75个线程来发送吗 我应该不使用线程发送吗 我的本地测试没有意义。(我不能操作超过50台的服务器) 请帮帮我。这没有黄金法则。根据您的应用程序,您可以找到: 只有一个线程的一个连接就足以使用机器的所有资源 使用大约2个CPU的数量*CPU的数量足以使用机器的所有CPU 如果您有同步请求(而不是异步请求)和较高的网络延迟,您可能会发现大部分时间都在等待数据,在这种情况下,更多的连接将

我有150根线

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

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

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

我应该不使用线程发送吗

我的本地测试没有意义。(我不能操作超过50台的服务器)


请帮帮我。

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

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

我的首选是允许异步消息传递/请求,并允许一个连接使用机器上的所有CPU/资源(如果有意义的话),因为当您使用150个繁忙连接进行测试时,您可能会得到更好的结果,在现实世界中,你可能无法同时或以相同的程度激活它们。

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

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

我的首选是允许异步消息传递/请求,并允许一个连接使用机器上的所有CPU/资源(如果有意义的话),因为当您使用150个繁忙连接进行测试时,您可能会得到更好的结果,在现实世界中,它们可能不会同时或以相同的程度处于活动状态。

为什么有150个线程?Netty只使用
AMOUNT\u处理器*2
线程发送其默认配置。您的高线程数似乎是一个设计问题。当服务器接收数据时,低线程会导致延迟。我的意思是。。。所有数据不是同时出现的为什么有150个线程?Netty只使用
AMOUNT\u处理器*2
线程发送其默认配置。您的高线程数似乎是一个设计问题。当服务器接收数据时,低线程会导致延迟。我的意思是。。。所有数据并非同时提供,谢谢您的回答。客户端的“连接”不会立即激活,但服务器的writeAndFlush(发送)几乎是同时进行的。(50个客户端)我使用了套接字选项TCP_NODELAY。感谢您的回答。@bot TCP_NODELAY最适合于低延迟,但是您可能会发现它无法获得更高的吞吐量结果(因为它避免合并数据)。如果不使用此选项,则值得测试吞吐量。谢谢您的回答。客户端的“连接”不会立即激活,但服务器的writeAndFlush(发送)几乎是同时进行的。(50个客户端)我使用了套接字选项TCP_NODELAY。感谢您的回答。@bot TCP_NODELAY最适合于低延迟,但是您可能会发现它无法获得更高的吞吐量结果(因为它避免合并数据)。如果不使用此选项,则值得测试吞吐量。