我想了解社区对此的看法。如果我有一个严重依赖 DB/IO 的进程,那么使用 Task Parallel 库并行化各个进程路径有多聪明?
我举个例子……如果我有一堆物品,我需要做以下操作
- 查询数据库以获取项目列表
- 执行一些聚合操作以根据动态参数列表对某些项目进行分组。
- 对于每个分组结果,根据聚合结果在数据库中查询某些内容。
- 对于每个分组的结果,做一些数值计算(3 和 4 将依次发生)。
- 对 #3 中计算的结果进行一些插入和更新
- 对 #1 中返回的每个项目进行一些插入和更新
从逻辑上讲,我可以在步骤#3、#5、#6 中并行化为任务图,因为其中一项与前一项的结果无关。但是,这些中的每一个都将在数据库(sql server)上等待,这很好,我知道我们只能处理 SQL server 允许的范围内。
但是我想在本地机器上逻辑地分配任务,以便它处理的速度与数据库允许我们一样快,而不必等待我们结束的任何事情。我做了一些模拟原型,我用 Thread.Sleeps 替换了 db 调用(我还尝试了 .SpinWait 的一些变体,它快了一百万倍),并且并行版本比当前的实现快得多,完全是串行的而且根本不平行。
我担心的是给 SQL 服务器带来太大的压力......在我走得太远之前,我应该考虑什么?