2016-01-18 88 views
0

我有150個主題。Netty - 在java中同時發送消息的最佳方式

每個線程都有Netty客戶端它連接到服務器。

我應該使用更多150個線程發送?

我應該使用75個線程發送?

我應該使用沒有線程發送?

我的本地測試沒有意義。 (我不能操作服務器超過50)

請幫助我。

+0

爲什麼你有150個線程? Netty僅使用'AMOUNT_OF_PROCESSORS * 2'線程發送其默認配置。您的高線程數似乎是一個設計問題 – Ferrybig

+0

hmm低線程會導致服務器收到數據時延遲。 – bot

+0

我的意思是......所有的數據不是在同一時間 – bot

回答

2

對此沒有金科玉律。根據您的應用程序,您可以找到;

  • 只有一個線程與一個線程的連接足以使用機器的所有資源。
  • 在CPU的數量爲2 *左右的情況下,CPU的數量足以使用機器的所有CPU。
  • 如果您有同步請求(而不是異步請求)和較高的網絡延遲,您可能會發現大部分時間都在等待數據,在這種情況下,更多連接將有助於緩解此延遲。

我的選擇是允許異步消息/請求,並允許單個連接使用所有的CPU /資源在機器上,如果因爲雖然你可能會得到更好的結果,當你有150間繁忙的連接測試它是有道理的,在真實的世界中,他們可能並不都是同時活躍的。

+0

謝謝你的回答。客戶端的「連接」不是同時激活,但服務器的writeAndFlush(發送)幾乎是同一時間(50個客戶端)我使用套接字選項TCP_NODELAY。謝謝你的好回答。 – bot

+0

@bot TCP_NODELAY最適合低延遲,但是您可能會發現它無法獲得更高的吞吐量結果(因爲它避免了數據的合併)值得在沒有此選項的情況下測試吞吐量。 –

+0

啊...!謝謝,我明白了。 – bot

相關問題