c#并行一个长计算过程的最佳方法是什么?

本文关键字:过程 最佳 方法 是什么 计算 并行 一个 | 更新日期: 2023-09-27 18:15:40

我做了一个模拟真实计算任务的假测试。我现在的代码是:

static void Main()
{
    List<ulong> list = new List<ulong>();
    Action action = () =>
    {
        Random rng = new Random(Guid.NewGuid().GetHashCode());
        ulong i = 0;
        do
        {
            i++;
            if (rng.Next(100000000) == 1000)
            {
                lock (list) list.Add(i);
                Console.WriteLine("ThreadId {0}, step {1}: match is found", 
                                   Thread.CurrentThread.ManagedThreadId, i);
            }
        } while (list.Count < 100);
    };
    int length = Environment.ProcessorCount;
    Action[] actions = new Action[length];
    for (int i = 0; i < length; i++)
        actions[i] = action;
    Parallel.Invoke(actions);
    Console.WriteLine("The process is completed. {0} matches are found. Press any key...", 
                       list.Count);
    Console.ReadKey();
}

是否有更好的方法来优化一个长计算过程的并行任务数量?

c#并行一个长计算过程的最佳方法是什么?

我不确定我是否正确理解了这个问题。您共享的代码将并行运行该操作的不同实例。但是如果你想计算一个长时间运行的任务并行性能,那么你应该把长时间运行的任务分成小的工作组。或者如果你是在一个集合上迭代,你可以使用并行的TPL(任务并行库)提供的parallel for或foreach,它将根据指标,如内核数量和cpu负载等来决定线程的数量。