【问题标题】:Where are my managed threads in W3WP我在 W3WP 中的托管线程在哪里
【发布时间】:2011-04-28 10:53:51
【问题描述】:

我在 asp.net 应用程序 (System.Threading.Thread) 中创建了一些托管线程。每个线程在数据库中创建一行并在工作完成后将其删除(约 3-5 分钟)。

当我在 Windows 的 task manager 中查看 w3wp 的线程数时,线程数低于我的预期。例如,如果我根据数据库有 100 个正在运行的作业,w3wp 中有 50 个线程。波动很大,有时是一对一的。

thread count 中的 task manager 是否计算托管线程?如果是,那我的线程在哪里?

【问题讨论】:

  • 您是如何创建托管线程的?
  • @Hero: System.Threading.Thread thread = new System.Threading.Thread()
  • 拥有托管线程的数量作为衡量标准并不是很有意义;大多数这些线程在睡眠时的开销几乎为零。你为什么想知道?
  • @Hero:我知道计数,如果其中任何一个未能从数据库中删除相应的数据行(一种健康监控),我可以追踪它们

标签: c# multithreading count w3wp


【解决方案1】:

操作系统[线程]与托管线程没有固定关系,因为非托管主机可以控制托管线程和非托管线程之间的关系。具体来说,复杂的主机可以使用 Fiber API 针对同一个操作系统线程调度多个托管线程,或在不同操作系统线程之间移动托管线程。

【讨论】:

  • 那么我如何才能获得 w3wp 中托管线程的真实数量?
  • 真的没有办法做到这一点; W3WP 是一个执行某些托管代码的非托管进程 - 您只能从非托管的角度检查它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多