.net 来自不同进程的线程池
任务并行库是ThreadPool的一个很好的包装器,它确保了所有内核的最佳使用。这意味着不仅要生成线程,还要限制活动线程的数量,以避免过多的活动线程淹没系统。例如,两个并发的Parallel.ForEach()不会在8核机器上产生16个活动线程。将有8个活动线程,两个ForEach()的工作将在它们之间平衡。但这种平衡在过程层面上起作用。整个系统怎么样?.net 来自不同进程的线程池,.net,performance,threadpool,task-parallel-library,.net,Performance,Threadpool,Task Parallel Library,任务并行库是ThreadPool的一个很好的包装器,它确保了所有内核的最佳使用。这意味着不仅要生成线程,还要限制活动线程的数量,以避免过多的活动线程淹没系统。例如,两个并发的Parallel.ForEach()不会在8核机器上产生16个活动线程。将有8个活动线程,两个ForEach()的工作将在它们之间平衡。但这种平衡在过程层面上起作用。整个系统怎么样? 我担心使用TPL运行2个或多个CPU绑定应用程序实例时可能出现的争用。问题是:从性能的角度来看,拥有多个并发CPU绑定的应用程序可以吗?还是值
我担心使用TPL运行2个或多个CPU绑定应用程序实例时可能出现的争用。问题是:从性能的角度来看,拥有多个并发CPU绑定的应用程序可以吗?还是值得将所有逻辑移到一个进程中,并利用PTL工作平衡?您尝试过吗?这似乎是我认为最简单的答案?创建两个CPU密集型进程并查看如何处理这些进程?不考虑其他进程中可能发生的情况。这是设计上的,操作系统的职责是确保进程之间公平地共享系统资源。与aplomb一样,一个典型的Windows安装会同时运行约1000个线程。当然,很少有人会主动地消耗cpu周期。