如何度量特定逻辑线程的CPU使用情况
本文关键字:线程 CPU 情况 用情 何度量 度量 | 更新日期: 2023-09-27 18:17:32
(这与我通常问的基本编程问题无关!)
我们有一个有趣的问题。我们有一个多线程的非可视化服务器应用程序(每个进程运行10-20个工作线程),它使用了大量的CPU。这是故意的。
我们无法在开发人员系统上分析这段代码的实际工作负载。工作负载是高度(非常高度)多样化的。为了优化这段代码,我们需要能够为生产位保存一个日志,记录哪些工作占用了多少CPU。
我们当前的实现使用System.Diagnostics.ProcessThread.TotalProcessorTime来测量,但是在。net v4中并不能保证逻辑。net线程与ProcessThread的亲缘性,所以我们不能确定我们到底在测量什么。
我们可以做些什么来测量每个线程/每个函数的CPU使用?
我们听说线程的替代库是单向的,有什么建议吗?
ProcessThread和Thread之间的分裂始于。net 2.0。灵感来自于SQL Server团队内部的一个项目,该项目计划使用纤维实现。net线程。这个项目被放弃了,因为没有已知的CLR主机不使用操作系统线程(又名ProcessThread)来实现。net线程。
唯一的问题是将ProcessThread与。net线程匹配。这在。net 2.0中被故意设置得很困难。唯一合适的方法是让线程本身调用GetCurrentThreadId(),然后找到与ProcessThread.Id匹配的。一旦您在那里,您不妨调用GetThreadTimes()。这也需要OpenThread()来获取句柄,CloseHandle()来再次关闭它。