我制作了一个针对我的特定需求进行优化的自定义线程池。但是,当进程中有多个 AppDomain 时,CLR ThreadPool 能够在所有 AppDomain 之间共享,我希望能够重现这种行为。
这可以使用 MarshalByRefObject 和 Remoting 来完成,以便创建分布式线程池,但我担心这会增加不必要的开销,因为自定义线程池的关键目标是性能。
另一个理论上的解决方案是使用非托管对象破解 AppDomain 内存边界。如果我是正确的,AppDomain 中的内存边界仅适用于托管对象,因此每个 AppDomain 中可能有一个托管包装器全部指向同一个非托管对象。
所以我的问题是:
- 有没有办法定制
使用远程处理的线程池
最小的开销?
- 如果不是的话是不是
可以共享非托管
跨AppDomain的对象?
在每个应用程序域中创建一个新的线程池实例,然后使用信号 http://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspx控制所有实例上运行的线程总数。这意味着您仍然可以处理相同的并发作业总数,但不必担心编组问题。
MSDN 文档有一个示例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)