我正在使用TPL Dataflow构建一条流水线。假设我有一个由四个TransformBlocks组成的流水线。
GetDataFromDatabase
ProcessData1
ProcessData2
SendDataToRestService
每个操作可能会是长时间运行的操作。GetDataFromDatabase 可能大部分时间都在等待数据库响应,SendDataToRestService 则是等待服务响应。ProcessData1 和 ProcessData2 将是长时间本地 CPU 密集型处理。
现在,我的意图是在每个块上设置 maxdegreeofparalellism 为机器上的核心数(可能是 4)。
但我想到这意味着它将同时执行 4 个 GetDataFromDatabases,4 个 ProcessData1,4 个 ProcessData2 和 4 个 SendDataToRestService。这意味着我可能会有 16 个线程同时运行。加上我实际上有 3 个不同的流同时做类似的事情。
问题:什么是最好的方法,以获得最佳性能?根据我所读的,如果我尝试做太多,由于上下文切换,实际上可能会减慢性能。是否有最佳方法,或者只能“试一试”?
ActionBlock
。只需将所有工作项发布到其中,并使用异步工作者委托即可。您可以以这种方式设置并行度。 - usr