文档章节

LiteSetup多线程优化方案

梦想游戏人
 梦想游戏人
发布于 2016/06/12 13:24
字数 743
阅读 184
收藏 0

LiteSetup 轻量级安装程序框架  项目中:

主要是2方面可以多线程优化处理:UI和核心代码,核心代码的压缩多线程处理

1.最开始UI和核心代码在一个线程,导致可能假死现象,

解决方案:给核心代码单独开一个线程。

结果:解决假死问题。伪代码如下

...
void Compress()
{
std::thread t(...
{
...
});
t.detach();
}
...

 

2.由于核心代码跑在一个线程,导致只能利用一个CPU逻辑核心,压缩速度不快

测试数据:打包450MB 左右的ra2,可见 压缩占用时间20s ,io读写  分别为7s  和 0.2s

HDD数据

SSD数据

可见性能瓶颈在压缩处理

优化方案

1.压缩部分开启多线程支持,在读取文件片段后即刻开启一个线程 来压缩 完成后添加到缓存队列,管理线程。

2.势必内存会疯长,所以限制当前文件缓存大小,例如: 如果缓存大小 大于100MB就立刻写入。

3.如果压缩线程数为0,意味着压缩完毕,就立刻把缓存的剩下部分,写入文件。处理后续事件。

整个过程之后压缩是多线程,文件写入是某个压缩线程完成后 执行的,文件读取是在核心线程完成。最后利用轮询是否平衡的

思想判定是否压缩完毕。

测试数据:(整个压缩过程( 文件读取,数据压缩,文件写入))

优化前:   

整个打包过程 25s

优化后:

整个打包过程9s 

结果:加入多线程优化后,效率提升特别大,虽然线程开销导致等效时间(单独一个线程压缩时间,和多个线程每个线程压缩时间之和)多了,36.912-23.461=13秒,但是总效率提升3倍。

部分核心代码:

进一步优化:虽然初步方案得到了很好的效果,但是线程效率比 不高,可以进一步优化。

1. 通过线程池来管理创建的线程,提高单个线程效率

2.dump文件(写入文件)的时候 添加多线程机制,原方案是在某个压缩线程中写入,可能会导致其他压缩完成但未写入缓存的线程挂起

3.调整不同的文件块大小 ,可适当加大FileReader的文件块大小 减少线程切换代价,用内存换取时间。

4.dump文件限制可适当加大,加快整体速度。

 

© 著作权归作者所有

共有 人打赏支持
梦想游戏人
粉丝 36
博文 429
码字总数 122400
作品 0
成都
zlib解压压缩数据

LiteSetup中的压缩解压代码 zlib只是对内存段压缩解压,对于文件,我们可以分段 读取到内存然后操作 注意compressBound 有BUG 如果存在压缩后的大小大于原大小,此函数返回的是压缩后最大大小...

梦想游戏人
2016/06/11
56
0
Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)

前言 在 开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性、流畅性、稳定性等,是提高用户留存率的关键 本文全面讲解性能优化中的所有知识,献上一份 性能优化的详细攻...

Carson_Ho
05/30
0
0
LiteSetup创建快捷方式

运行 生成的临时vbs脚本 来生成 桌面快捷方式 vbs脚本 cpp代码

梦想游戏人
2016/06/10
24
0
【腾讯Bugly干货分享】微信iOS SQLite源码优化实践分享实录

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57b6a449433221be01499486 Dev Club 是一个交流移动开发技术,结交朋友,扩展人脉的社群,成员...

腾讯Bugly
2016/09/06
43
0
【腾讯Bugly干货分享】微信iOS SQLite源码优化实践

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57b58022433221be01499480 作者:张三华 前言 随着微信iOS客户端业务的增长,在数据库上遇到的...

腾讯Bugly
2016/08/19
21
0

没有更多内容

加载失败,请刷新页面

加载更多

Spark Load Data and Export Data

Load_Data_Command 一、导入数据-加载csv文件数据作为spark 临时表DataSource(不需要提前创建表,方便数据分析) 该命令将csv文件导入到临时表中,命令格式为 load data '文件路径' table [...

Avner
22分钟前
2
0
CDH5.13离线安装Spark2.3详细步骤

简介: 在我的CDH5.13集群中,默认安装的spark是1.6版本,这里需要将其升级为spark2.x版本。经查阅官方文档,发现spark1.6和2.x是可以并行安装的,也就是说可以不用删除默认的1.6版本,可以直...

hblt-j
25分钟前
2
0
Add XSS protection headers on Nginx

Add XSS protection headers on Nginx Add the following line in the http or server part of your Nginx configuration : ... # XSS Protection add_header X-Frame-Opt......

idoz
26分钟前
1
0
cmake windows 配置xp toolset

MPRO
32分钟前
2
0
day125-20181023-英语流利阅读-待学习

外卖员不要哭,打零工不容易 雪梨 2018-10-23 1.今日导读 上期我们讲到,有人认为:“零工经济”虽然没有占领全世界,但它剥夺了劳动者的合法权利,加剧了工作的不稳定性,那么“零工经济”是...

飞鱼说编程
45分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部