簡體   English   中英

如何在多線程環境中共享 2 個 SSH 連接

[英]How to share 2 SSH connections in multithreaded environment

目前我有一個 ExecuterService,我向它提交了多個線程。 在這些線程之間共享單個 SSH 連接。 一個線程獲取 SSH 連接的鎖(以執行一些命令),其余線程等待。

現在我想優化性能,我想在這些線程之間使用 2 個 SSH 連接。 為了實現,我認為我必須將我的線程分成兩部分,並在它們之間共享 2 個連接。 我正在尋找是否有更合適的方法來做到這一點。 預先感謝您的答復。

我已經完成了 POC 的結論是,2 個 SSH 連接可以在並行執行環境中正常工作。

如果一個線程使用 SSH 連接的時間是固定的,那么將線程分成 2 部分是可以接受的。 否則它可能不是最佳的,因為您可能讓一個部分在另一部分之前結束其處理,並且其中一個連接將可用但未使用。

從理論上講,您遇到了需要訪問多個服務器的多個客戶端的問題。 您的描述是具有與服務器一樣多的隊列,並且每個客戶端都在一個隊列上等待。 它並不愚蠢,並且是在現實世界中超市結賬時使用的。 但是,如果人類看到一個隊列為空而他們的隊列不是空的,那么他們就有足夠的智慧來更改隊列……好處是實現起來很簡單。

另一種可能性是有一個單一的隊列,一旦服務器可用,它就會向調度點發送信號,將其發送到第一個客戶端。 這提供了等待時間的最佳重新分區。 在現實世界中,它通常用於計數器很少的行政服務中。 不好的一點是實現起來稍微復雜一些。 它可以通過客戶端隊列、可用服務器隊列(或堆棧)和阻止下一個客戶端直到服務器可用的信號量來實現。

對於瑣碎的短任務,第一種方法可能是最好的,因為第二種算法提供的增益可能不足以彌補由於更高的復雜性而損失的時間。 否則,您仍然可以在更復雜的算法與效率較低但更簡單的算法的開發(和維護)成本之間取得平衡。

創建一個ArrayBlockingQueue<SSH_connection> q 讓一個線程,當它想要通信時,做conn = q.take() ,當完成時, q.put(conn) 一開始,將兩個連接都放入該隊列。

暫無
暫無

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

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