我該如何確定走頻道的哪一邊在另一邊等待?如何確定走頻道的哪一邊正在等待?
我想知道這個,所以我可以找出我的處理正在受到限制,並通過分配更多資源進行響應。
一些選項
2種方法我認爲雙方都需要的東西所以測量不太吵做記錄值的移動平均值,但是這不是一個bigproblem。
- 使用一個定時器來檢查的時間%的消費者
等待在單個消費者的情況下,我可以從通道消耗後,我停止計時器之前啓動一個定時器得到一個記錄。我可以跟蹤每個獲取週期中等待和響應的時間百分比。
-
緩衝信道的
- 試樣長度
如果信道經常是0,這意味着我們正在消耗比發送速度更快。同樣,如果緩衝區已滿,我們發送速度比我們可以接收的速度快。我們可以隨時檢查我們頻道的長度,以確定運行緩慢的情況。
出於性能原因或其他原因,是否有充分的理由選擇其中一個到另一個?有一個更簡單的解決方案來解決這個問題嗎?
例
我正在執行N
HTTP請求抓住在同一時間在多達W
夠程內容,並在單個的goroutine運行發送所有內容的信道到一個processor
,服務,其在將數據反饋給客戶端。
每個工作任務將導致通道上發送大量消息。每個worker
的任務可能需要幾分鐘才能完成。
下圖總結了3名併發工作人員(W=3
)的數據流。
[worker: task 1] -
\
[worker: task 2] - | --- [ channel ] --- [ processor ] -> [ client ]
/
[worker: task 3] -
我想知道我是否應該請求過程中運行更多的工人(增加W
)或更少的工人(減少W
)。由於客戶端通過非常不同的速度進行連接,因此每個請求可能會有所不同。
您是否嘗試過僅運行阻止配置文件? – JimB
你可以使用'len()'和'cap()'作爲頻道 –
@JimB我不清楚你的意思是「阻止配置文件」。 – turtlemonvh