我正在解决一个需要执行许多令人尴尬的可并行化任务的问题。该任务是通过从数据库中读取数据来创建的,但是所有任务的集合将超过机器上的内存量,因此必须创建、处理和处置任务。我想知道解决这个问题的好方法是什么?我正在考虑以下两种方法:
实现一个同步的任务队列。实现一个生产者(任务创建者),它从数据库中读取数据并将任务放入队列中(将队列中当前的任务数量限制为一个恒定值,以确保不超过内存量)。有多个消费者进程(任务处理器)从队列中读取任务、处理任务、存储结果并处理任务。在这种方法中,大量的消费者进程会是多少?
使用 .NET 并行扩展(PLINQ 或并行),但我知道必须创建一个任务集合(我们可以在并行处理的同时将任务添加到集合中吗?)。所以我们将创建一批任务——说一次 N 个任务,然后处理这批任务并读取另外 N 个任务。
您对这两种方法有何看法?