簡體   English   中英

我應該使用多少個線程來通過java.nio發送和接收數據?

[英]How many thread should I use to send and receive data with java.nio?

我正在創建一個包含許多用於學習的機器的分布式系統。 我需要在計算機之間發送和接收數據,並且正在使用java.nio創建該網絡。 在一台機器上,我使用一個線程作為serverocketchannel來接收來自其他機器的數據,並為每個數據包使用一個新線程來發送它。 這意味着在一台機器中一個接收線程和多個發送線程。

但是我面臨一個問題,因為一個線程處理接收,所以許多客戶端在連接時將處於掛起狀態。 我應該將其更改為一個線程處理接收,一個線程處理發送嗎? 謝謝P / s:我不想使用任何第三方框架。

如果您的網絡中的發送者多於接收者,那么顯然有些發送者將最終等待。 如果您的接收方多於發送方,那么顯然有些接收方將處於空閑狀態,因為幾乎所有時間發送方都可能一對一連接到接收方。


我無法判斷您應該“做什么”,因為我不知道您要完成什么。

無論如何,在接收器端使用的兩種常見模式是:

  • 一線程處理所有
  • 一個線程只處理接受連接並打開流,然后將流的實際工作委托給另一個線程(通常是從線程池中進行,以防止在為每個連接創建新線程時可能發生的資源耗盡)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM