ROTOU 发表于 2013-5-10 00:05:00

有没有精通C#并行编程的?

本帖最后由 ROTOU 于 2013-5-10 00:11 编辑

寻找比较精通C# TPL的coder,解决一个需求。
需求要求:
并行遍历一个高速数据库,能实现合适的分组遍历、以及动态分组;
遍历过程中能接受停止和取消state,并且可以重启遍历过程=>重启遍历过程不从数据库的开始重新开始,而是从上次暂停的地方重启;
自定义并行TaskScheduler,能根据CPU的数量和CPU 繁忙程度、内存占用情况,自动调节。

遍历过程中需要使用TLS的部分,尽量顾及效率。




大米 发表于 2013-5-10 12:27:28

多大数量级的数据?

ROTOU 发表于 2013-5-10 13:35:44

千万item。 高速数据库可以视为数组,可以并发访问。

大洲 发表于 2013-5-12 05:35:39

需求太不明确.

典型硬件条件?
量化目标?参照?
数据类型?平均典型长度?存储方案?

其次才是调度方案,IO方案,算法优化等等.

再并行,也是把CPU用光而已.资源就那么多. 所以按你所说的.我估计IO压力是一大块,算法是一大块.这2块解决了,别的要好办的多.

具体业务需求不同,实现方法也完全不同.


ROTOU 发表于 2013-5-12 11:53:44

关于高速数据库,每秒读写都可以达到数十k item。数据库的IO占用比较小,而且未来有可能转为分布式的高速数据库。

数据库存储数据比较单一,可以视为数组。换言之,需要一个能智能遍历该数组的并行方案。

所需求的是: 合理的数据源分组遍历,已经能够动态设定分组的大小;
能够自定义TaskScheduler,根据遍历启动时、动态调整时设定的CPU占比,分配的CPU core数量,来进行动态的调整。

比如说,设定运行该遍历的服务器CPU占比最高不超过30%,内存占用不超过80%。

所期望的解决方案,是一个动态的智能化的方案,能够尽最大可能的进行高速遍历。

shanguiyao 发表于 2013-7-8 09:13:51

考虑用更好的机器吧.除非是自己干,否则请牛人解决问题永远比买设备要贵得多.

ROTOU 发表于 2013-7-8 12:20:51

自定义并行TaskScheduler: 目前我已经实现了线性控制、指数增长控制、等等几种方式。

前不久做过测试,8个线程遍历300万数据,耗时20分钟左右。还可以接受。

对学过TPL的人来说,这个是比较基础的问题了,只是一个应用型的问题。

页: [1]
查看完整版本: 有没有精通C#并行编程的?