簡體   English   中英

如何在多線程應用程序中衡量負載平衡

[英]How do I measure load balancing in a multithreaded application

我正在編寫一個多線程C#/。Net應用程序來控制工業過程。 有許多計算密集型任務需要執行,並且其中許多任務可以並行完成,而對共享對象的爭用很少。 因此,這是一個產生多個線程以提高性能的好機會。

我如何測量/監視/測試線程負載性能,以確保在創建的所有線程之間最佳地平衡工作,因此所有線程都充分利用了從調度程序獲得的最大時間片,而沒有花很多時間停下來還是等待?

FWIW我正在使用VS2010專業版

您可以通過使用PerformanceCounter類來測量CPU使用率。

如果您的負載在多個CPU內核之間得到了很好的平衡,那么如果沒有瓶頸(例如磁盤或網絡訪問),則全局CPU應該以100%的速度運行。 如果某個線程正在等待資源或被阻塞,則應在CPU使用率級別上注意到它。

但是在調試過程中,僅使用taskmgr.exe確實很容易。

如果您希望對線程等待進行細粒度的分析,則可以通過注冊一個等待線程超時通知的WaitOrTimerCallback來掛接ThreadPool。 但是請記住,線程有時會等待是很正常的,您想要的是最大化CPU使用率,而不是最小化線程等待(是的,在最壞的情況下,您可以使CPU充滿線程操作,但是如果您堅持使用相同的數字比邏輯CPU內核的線程數大,就可以了)

暫無
暫無

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

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