C#:多进程开发,控制进程数量
2021-05-13 17:28
标签:path nbsp while ant let read tip for 通过 正在c#程序优化时,如果多线程效果不佳的情况下,也会使用多进程的方案,如下: 使用c#中的Process开启线程,并运行一个c#编译的一个Console的业务工程,Console.exe通过接收参数决定并行进程中的每个进程处理具体的任务:例如,实现一个多进程下载,传递给每个进程.exe的参数就是待采集的路径。 一般开辟的进程任务数也是要有限制的开,比如开辟进程数与计算机内核数一样Enviroment.ProcessCount。那么问题来了 问题一:如何在一个c#业务代码确保同时运行的进程数量确保尽量都是最大进程数呢? 假设:我们有25个带下待的任务,有的任务是1个小时左右才能完成、有的10分钟就完成了,如何确保一个完整的业务代码中去确保10分钟完成后,发现当前的进程数还未达到最大数,而且还有待处理任务,就继续开辟新的下载进程任务。 问题二:上边提到的进程最大数,也包含计算机中其他用户开辟的进程数。 假设用A:已经开辟了3个AutoCollectMrMultipleProcess.exe,用户B去进行自己的采集任务时,允许开辟的进程数为:Enviroment.ProcessCount-3(如果该值已经小于等于0,就不再开辟,进入等待)。 问题三:如何确保业务处理是同步的。 实现代码: C#:多进程开发,控制进程数量 标签:path nbsp while ant let read tip for 通过 原文地址:http://www.cnblogs.com/yy3b2007com/p/7538847.htmlSystem.Threading.Tasks.Task task=System.Threading.Tasks.Task.Factory.StartNew(
(object mystate) =>
{
Process process = Process.Start("AutoCollectMrMultipleProcess.exe", mystate.ToString());
process.WaitForExit();
}
, collectPathItems.Dequeue())
int maxProcessCount = Enviroment.ProcessCount;
List
// 初始化下载任务记录start
。。。
// 初始化下载任务记录end
// sleep 30 seconds...
Thread.Sleep(30 * 1000);
cursor++;
}