gpt4 book ai didi

vb.net - 我需要担心创建的任务数量吗?

转载 作者:行者123 更新时间:2023-12-01 12:33:41 24 4
gpt4 key购买 nike

我试图在网上找到与此相关的内容,但似乎没有明确的答案。我只是有自己的推理,想知道什么是最好的方法。

我的应用程序运行一长串文件(大约 100-200 个)并对其中的数据进行一些计算。每个文件都需要几分钟的时间来处理。

我最初计划根据处理器中的内核数量创建任务。

因此,如果有 4 个核心,那么我将创建 3 个任务,并让每个任务处理 1/3 的文件。

我的阅读告诉我线程池管理所有任务并根据各种因素为其创建线程。(简单来说?)

我是否可以为每个文件简单地创建一个任务并让线程池决定什么是最好的?

非常欢迎任何信息、建议!谢谢

编辑:所有文件大约 5MB,文件中数据的计算/分析非常繁重。

最佳答案

200 个文件并不是一个很长的列表,但我仍然建议不要让 ThreadPool 充满待处理的任务。

为此,您可以使用 TPL Dataflow 的 ActionBlock。您创建 block ,给它一个操作来对每个项目执行并将并行度限制为您想要的任何内容。

C# 示例:

var block = new ActionBlock<string>(async fileName =>
{
var data = await ReadFileAsync(fileName);
ProcessData(data);
}, new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 50 });

foreach (var fileName in fileNames)
{
block.Post(fileName);
}

block.Complete();
await block.Completion;

因为它不仅仅是一个 CPU 绑定(bind)操作,你应该使用比可用 CPU 更高的数量。考虑使用配置文件,以便您可以根据实际性能进行更改。

关于vb.net - 我需要担心创建的任务数量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255207/

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