繁体   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