gpt4 book ai didi

c# - .NET 中令人尴尬的可并行任务

转载 作者:行者123 更新时间:2023-11-30 13:53:08 24 4
gpt4 key购买 nike

我正在处理一个问题,我需要执行大量可并行化的任务。任务是通过从数据库中读取数据创建的,但是所有任务的集合会超过机器上的内存量,因此必须创建、处理和释放任务。我想知道解决这个问题的好方法是什么?我正在考虑以下两种方法:

  1. 实现同步任务队列。实现一个从数据库中读取数据并将任务放入队列的生产者(任务创建者)(将当前队列中的任务数限制为一个常数值,以确保不超过内存量)。有多个消费者进程(任务处理器)从队列中读取任务,处理任务,存储结果并处理任务。这种方法需要多少消费者流程?

  2. 使用 .NET 并行扩展(PLINQ 或并行 for),但我知道必须创建任务集合(我们可以在并行处理时向集合添加任务吗?)。因此,我们将创建一批任务——假设一次有 N 个任务,然后处理这批任务并读取另外 N 个任务。

您对这两种方法有何看法?

最佳答案

使用有界队列的线程池来避免系统不堪重负。

如果您的每个工作任务都受 CPU 限制,那么首先配置您的系统,使系统中的线程数等于您的机器可以运行的硬件线程数。

如果您的任务不受 CPU 限制,那么您必须试验池大小以获得针对您的特定情况的最佳解决方案

您可能必须尝试使用​​任何一种方法才能获得最佳配置。

基本上,测试、调整、测试、重复直到您满意为止。

关于c# - .NET 中令人尴尬的可并行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com