【问题标题】:What is the difference between a CLR Worker Thread and a Worker Thread?CLR 工作线程和工作线程有什么区别?
【发布时间】:2012-01-09 05:10:46
【问题描述】:

查看并发分析器,线程视图似乎我的应用程序产生的线程比我想象的要多得多。其中大部分是“CLR 工作线程”或“工作线程”。

有什么区别?分别是在什么情况下创建的?

【问题讨论】:

    标签: c# multithreading concurrency profiling


    【解决方案1】:

    并发可视化器是一个非常新但非常酷的工具!功能,所以有一点(我相信)关于它的信息,低于我在 MSDN 等官方信息源中找到的信息:

    • 工作线程 - 由应用程序主线程创建的线程(表中的主线程条目)
    • CLR 工作线程 - 由 Common Language Runtime 创建的工作线程

    有用的链接:

    【讨论】:

    • CLR在什么情况下创建线程?这些是ThreadPool创建的线程吗?鉴于您的回答,我也对工作线程的数量感到困惑,我不明白我怎么能创建这么多。
    • 如果不看您的应用程序代码,真的很难说。 CLR 可以为垃圾收集创建 CLR 工作线程,关于应用程序线程,这再次只是猜测,但假设应用程序使用线程池,则存在有据可查的行为——“如果应用程序为线程池排队任务的速度比一个线程快处理它,那么线程池将创建额外的线程。”和“线程池的酷之处在于它是启发式的。如果您的应用程序需要执行许多任务,那么线程池会创建更多线程。”
    • 看截图你只有一个活动的应用程序线程(除了主线程),它在时间线图上是紫色的,这意味着它参与了 I/O 操作(你正在读取文件/网络流,io端口或类似的),所有其他线程都被阻塞以进行同步。我不知道为什么你有很多阻塞的工作线程,你是在某个同步循环中创建线程吗?
    猜你喜欢
    • 2017-12-05
    • 1970-01-01
    • 2010-11-22
    • 2018-07-25
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多