CLR托管线程:轻量级和重型进程

时间:2012-03-21 22:11:14

标签: c# .net multithreading threadpool

我正在开发一个在不同线程中处理管道的应用程序。在我的测试中,我已经看到,如果一个进程是“轻量级”或CLR确定这将很快结束CLR快速回收这个线程,并且各种工作单元可以同时共享同一个线程。

相反,如果一个进程需要一段时间或者有更多负载CLR打开不同的线程。

给我所有困难的TLS Thread local storage编程。

实际上我的应用程序管道需要一些时间来处理,似乎CLR总是为彼此分配一个托管线程。顺便说一句,如果在某些情况下两个管道共享一个托管线程,它们将发生冲突,因为它们使用TLS变量。

毕竟这是真正的问题......我可以假设如果一个进程需要一些时间/加载它会一直使用它自己的线程,还是我疯了呢?

对于我一直在阅读.net 3.5中的托管主题,就像使用一种黑盒子一样。所以也许这个问题永远无法得到回应。

修改

使用流程我将参考字典定义一系列带来结果的操作,更改或功能而不是您在任务管理器中识别的计算机进程。

2 个答案:

答案 0 :(得分:1)

  

我可以假设如果某个进程需要一些时间/加载它会   总是使用它自己的线程,或者我疯了吗

Process总是使用自己的线程。它不可能访问其他进程的线程,而不是我所知道的。

答案 1 :(得分:0)

从线程池线程运行的代码不应该在线程本地存储中放置任何不会通过finally块删除的内容。如果您需要确保代码使用的任何线程本地存储在该代码完成执行后死亡,您需要显式清理存储或在其自己的线程中运行该代码。