.Net如何创建一个跨进程的所有AppDomain共享的自定义ThreadPool?

我根据自己的特定需求制作了自定义ThreadPool.但是,当进程中有多个AppDomain时,可以在所有AppDomain上共享CLR ThreadPool,我希望能够重现此行为.

这可以使用MarshalByRefObject和Remoting来创建分布式ThreadPool,但我担心它会增加不必要的开销,因为自定义线程池的关键目标是性能.

另一个理论解决方案是使用非托管对象破解AppDomain内存边界.如果我是正确的,AppDomain中的内存边界仅适用于托管对象,因此每个AppDomain中可能有一个托管包装器都指向同一个非托管对象.

所以我的问题是:

>有没有办法制作自定义
使用远程处理的线程池
最小的开销?
>如果没有,是吗?
可能分享一个不受管理的
跨AppDomain的对象?

最佳答案 在每个appdomain中创建一个新的线程池实例,但随后使用
semaphore来控制在所有实例中运行的线程总数.这意味着您仍然可以处理相同的总并发作业,但不会有编组的悲痛.

MSDN文档有一个例子.

点赞