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