有没有精通C#并行编程的?
本帖最后由 ROTOU 于 2013-5-10 00:11 编辑寻找比较精通C# TPL的coder,解决一个需求。
需求要求:
并行遍历一个高速数据库,能实现合适的分组遍历、以及动态分组;
遍历过程中能接受停止和取消state,并且可以重启遍历过程=>重启遍历过程不从数据库的开始重新开始,而是从上次暂停的地方重启;
自定义并行TaskScheduler,能根据CPU的数量和CPU 繁忙程度、内存占用情况,自动调节。
遍历过程中需要使用TLS的部分,尽量顾及效率。
多大数量级的数据? 千万item。 高速数据库可以视为数组,可以并发访问。 需求太不明确.
典型硬件条件?
量化目标?参照?
数据类型?平均典型长度?存储方案?
其次才是调度方案,IO方案,算法优化等等.
再并行,也是把CPU用光而已.资源就那么多. 所以按你所说的.我估计IO压力是一大块,算法是一大块.这2块解决了,别的要好办的多.
具体业务需求不同,实现方法也完全不同.
关于高速数据库,每秒读写都可以达到数十k item。数据库的IO占用比较小,而且未来有可能转为分布式的高速数据库。
数据库存储数据比较单一,可以视为数组。换言之,需要一个能智能遍历该数组的并行方案。
所需求的是: 合理的数据源分组遍历,已经能够动态设定分组的大小;
能够自定义TaskScheduler,根据遍历启动时、动态调整时设定的CPU占比,分配的CPU core数量,来进行动态的调整。
比如说,设定运行该遍历的服务器CPU占比最高不超过30%,内存占用不超过80%。
所期望的解决方案,是一个动态的智能化的方案,能够尽最大可能的进行高速遍历。
考虑用更好的机器吧.除非是自己干,否则请牛人解决问题永远比买设备要贵得多. 自定义并行TaskScheduler: 目前我已经实现了线性控制、指数增长控制、等等几种方式。
前不久做过测试,8个线程遍历300万数据,耗时20分钟左右。还可以接受。
对学过TPL的人来说,这个是比较基础的问题了,只是一个应用型的问题。
页:
[1]