原 数学与多线程

场景1:读取大量文件,分析后,合并到一个二进制文件里面。

解决方案:多线程读取各个文件,分析各自写一份二进制缓存文件,最后合并各个缓存文件到一份文件里面。

设:  文件书n,开启线程m,每份文件分析阶段耗时p,每份合并文件耗时q

逐个读取合并文件耗时:n(p+q);

多线程合并耗时:((n/m)*(p+q))*α+nq   (α是与线程m成反比的参数,机器环境影响很大)

成立条件:n(p+q)> ((n/m)*(p+q))*α+nq 

解方程: q>(α/(m-α))*p  假设  α=a/m^β=> q>(a/(m^(β+1)-a) *p    (a为和机器环境相关的常数)

分析: m=1  >> q> ∞,不成立    

           m=2 >> q>(a/(2^(β+1)-a) *p 

           m=3 >> q>(a/(3^(β+1)-a) *p 

           m=4 >> q>(a/(4^(β+1)-a) *p

           可以看出随着线程数量的增长,不等式越来越容易达成,也就是越能够减小时间消耗。

α的变化是不容易预测的,过多的线程对处理效能的影响是相当大的。事实上,在我的代码里拼接二进制文件是个相当快速的过程,而分析阶段往往耗费大量的时间。

程序员的职责就是追求更加优秀的效能,下一步我希望对合并文件阶段进行多线程加速。不过这却是个失败的体验。

场景2:文件n,线程数量m,归并分组文件数量l,合并一份文件耗时p

解决方案:对文件进行分组,对多组进行多线程合并文件,在对合并后的文件进行分组合并,直到不足一组在逐个合并文件。       逐个合并耗时:n*p

     首先计算合并轮次:(假定文件数足量,余数略去)

                    第一轮:(n/(l*m))*p;           

                    第二轮:(n/((l^2)*m))*(p*l);

                    第三轮:(n/((l^3)*m))*(p*l^2);.。。。。。

                    第q轮:(n/((l^q*m))*(p*l(q-1));.。。。。。

      分组合并耗时:(n/(l*m))*p*q

     分析:

       不等式: (n/(l*m))*p*q<n*p >>q<ml;

 q满足条件  (n/l^q)逼近l  结合上市 >>(logl n-1)-ml<0,从趋势上看,随着分组l的逐步增加,等式被减数减少,减数增长,等式越来越成立,l最大取到>>log(n)(n-1)-mn<0;n足够大,前面的值趋向1,>>1-mn<0,不等式不成立。所以与不等式(logl n-1)-ml<0不成立。

         这种解决方式不成立,效能下降比较厉害。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏铭毅天下

干货 | Elasticsearch通用优化建议

Elasticsearch开发实战的后期会遇到性能问题,包括:创建索引性能、写入数据性能、检索性能等。网上有很多结合自己实际应用场景的相关优化建议,但“对症下药...

2372
来自专栏机器之心

从零开始:深度学习软件环境安装指南

3828
来自专栏SAP最佳业务实践

想学FM系列(16)-SAP FM模块:预算结构(7)-预算结构操作-多层预算结构维护

3.2.2.3 多层预算结构的维护 ? 1)FMHIE_HIEID- 编辑层次结构标识 功能为多层预算结构备用树定义一相标识ID,并定义相关属性,为之后生成备...

4578
来自专栏沃趣科技

容器化RDS|调度策略

导 语 前文数据库容器化|未来已来我们介绍了基于Kubernetes实现的下一代私有 RDS。其中,调度策略是具体实现时至关重要的一环,它关系到RDS 集群的服...

49210
来自专栏前端笔记

【新手指南】浅谈几种WordPress固定链接的优劣势

新手建站须知: 所谓“固定链接”,其实就是指访问某个网页的特定链接。也是我们站长将网站提交给各大站长平台的重要参数之一!建站初期我们必须确定好“固定链接”(准确...

3177
来自专栏蓝天

向量时钟解决数据一致性

向量时钟,最早是用于分布式系统中进程间的时间同步。由于在分布式系统中没有一个直接的全局逻辑时钟。在一个由n个并发进程构成的系统中,每个事件的逻辑时钟均由一个n...

1071
来自专栏AI科技大本营的专栏

全文来了!打败DBA老炮,机器学习如何改变数据库管理系统

作者 | Dana Van Aken、Andy Pavlo、Geoff Gordon 编译 | AI100 数据库管理系统(DBMSs)是所有数据密集型应用的...

36812
来自专栏Material Design组件

Material Design —Progress & activity

2113
来自专栏星流全栈

React + Redux 最佳实践

2365
来自专栏PPV课数据科学社区

数据挖掘系列(5)使用mahout做海量数据关联规则挖掘

上一篇介绍了用开源数据挖掘软件weka做关联规则挖掘,weka方便实用,但不能处理大数据集,因为内存放不下,给它再多的时间也是无用,因此需要进行分布式计算,ma...

3064

扫码关注云+社区