gpt4 book ai didi

c# - tpl 数据流最大并行度

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

我正在使用 TPL 数据流构建管道。假设我有一个包含四个 TransformBlock 的管道

GetDataFromDatabase
ProcessData1
ProcessData2
SendDataToRestService

其中每一个都可能(很可能会)是一个长时间运行的操作。 GetDataFromDatabase 可能主要是在等待数据库响应,SendDataToRestService 是在等待服务响应。 ProcessData 1 和 2 将是长时间运行的本地 CPU 密集型进程。

现在,我的意图是将每个 block 上的 maxdegreeofparalellism 设置为机器上的核心数(可能为 4)。

但我突然想到,这意味着它将一次执行 4 个 GetDataFromDatabases,一次执行 4 个 ProcessData1,一次执行 4 个 ProcessData2,一次执行 4 个 SendDataToRestService。这意味着我可能同时运行 16 个线程。除此之外,我实际上有 3 个不同的流程同时做类似的事情。

问题:最好的方法是什么,以便我获得最佳性能?从我读到的内容来看,如果我尝试做太多事情,我实际上会因为上下文切换而降低性能。是否有最佳方法,还是“试一试”?

最佳答案

首先,正如@usr 所建议的,您的案例适合单个ActionBlock。连接多个 block 的要点是组成具有不同配置的不同类型的 block 。例如,如果您的一个步骤的 MaxDegreeOfParallelism 为 1,而另一个步骤为 10。

其次,MaxDegreeOfParallelism设置了最大值,这意味着TPL可以根据资源的可用性选择该范围内的任意数字。所以我不担心为所有这些 block 设置最大值,如果 TPL 决定使用更少的线程更好,它会这样做。

来自 How to: Specify the Degree of Parallelism in a Dataflow Block

Because the MaxDegreeOfParallelism property represents the maximum degree of parallelism, the dataflow block might execute with a lesser degree of parallelism than you specify. The dataflow block can use a lesser degree of parallelism to meet its functional requirements or to account for a lack of available system resources. A dataflow block never chooses a greater degree of parallelism than you specify.

关于c# - tpl 数据流最大并行度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21658198/

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