CLR托管线程:轻量级进程与重型进程
本文关键字:进程 重型 轻量级 线程 CLR | 更新日期: 2023-09-27 18:28:47
我正在开发一个在不同线程中处理管道的应用程序。在我的测试中,我发现如果一个进程是"轻量级"的,或者CLR确定它将很快结束,CLR会快速回收这个线程,并且各个工作单元可以同时共享同一个线程。
相反,如果一个进程需要一些时间或有更多的CLR负载,则打开不同的线程。
对我来说,所有那些困难的TLS线程本地存储编程。
事实上,我的应用程序管道需要一些时间来处理,而且CLR似乎总是为彼此分配一个托管线程。BTW如果在某些情况下两个管道共享一个托管线程,它们将发生冲突,因为它们使用TLS变量。
在所有这些之后,真正的问题来了。。。我可以假设如果一个进程需要一些时间/负载,它将始终使用自己的线程吗?或者我疯了吗?
因为我一直在阅读.net 3.5中的托管线程,这就像是在用一种黑匣子表演。因此,也许这个问题永远无法得到真正的回应。
编辑:
关于流程,我引用了字典定义一系列导致结果的操作、更改或函数,而不是您在任务管理器中识别的计算机流程。
我可以假设如果一个过程需要一些时间/负载,它会总是使用它自己的线程,或者我疯了吗
Process
总是使用自己的线程。据我所知,不可能访问其他进程的线程。
从线程池线程运行的代码不应在线程本地存储中放置任何不会通过finally
块删除的内容。如果您需要确保一段代码使用的任何线程本地存储在该代码完成执行后都会失效,那么您需要明确地清理存储或在其自己的线程中运行该代码。