Java多线程生成文件性能分析案例
来源:互联网 发布:淘宝女装进货渠道 编辑:程序博客网 时间:2024/05/28 17:07
说明:由于每个磁盘一个时间点只能有一个磁头进行读写,因此其实不是并行读写。如果要利用多线程实现真正的并行读写,需要在硬件存储时使用RAID(独立磁盘阵列)。对于普通磁盘,单线程写文件比多线程写快。
利用VisualVM抓取线程快照如下:
1. 时间主要消耗在HTTP接口调用,大概占用了94.8%的时间。HTTP接口包括createActionLable和createSrategyLable。createActionLable接口平均每次调用耗时881ms,createStrategyLable接口平均每次调用耗时868ms。每生成一个文件需要分别调用1000次上述两个接口,所以时间消耗相当巨大。
2. 写文件计占用时间较短,大概每个文件生成需要579ms,按照每次30+个文件算,总共耗时在17370+ms。
3. 其他查询包括createGameInfoLable和createSceneLable,分别平均每次耗时113.6ms和101.8ms。createGameInfoLable是数据库查询,createSceneLable是http api查询。
4. 根据上述3点分析,使用多线程生成文件,其性能提升依赖于http api服务端的性能,如果http api服务端并发性能较高,那么在线上的16+核环境下会有有限的性能提升;如果http api服务端并发性能较低,采用多线程模型,反而可能因为服务端性能瓶颈导致单次http api调用耗时增加,最终整体性能下降。
结论:优化需要先评估http api服务端的应用特点和性能,然后决定是否采用多线程模型来提升性能。另外,如果业务允许,可以放弃同步http接口的方式,根据业务的时间特点,采用共享数据(定时同步)的异步方式来实现,思路就是将本地数据和远程数据做分别处理。
1 0
- Java多线程生成文件性能分析案例
- Java多线程之线程分类【案例分析】
- Java多线程生成测试文件
- java 服务器自动生成plist文件案例
- 性能需求分析案例
- Android 性能分析案例
- Android 性能分析案例
- Android 性能分析案例
- Android 性能分析案例
- Android 性能分析案例
- Android 性能分析案例
- Android 性能分析案例
- Android 性能分析案例
- Android 性能分析案例
- Android 性能分析案例
- Android 性能分析案例
- Java字节码.class文件案例分析
- Java字节码.class文件案例分析
- linux下socket通信,server和client简单例子
- 块元素和内联元素,文档流
- struts2+hibernate3.0+spring3.0整合所需包
- DB2中使用裸设备作为表空间容器
- 小马哥-----高仿红米note 刷机救砖 各种主板拆机机型图面面观
- Java多线程生成文件性能分析案例
- 单元测试工具googletest C++Test和CppUnit
- 关于函数wait_event_interruptible(wq, condition)
- 乱码比较系统的解释
- Clock Splitter+uvalive+二分
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(二)
- g++编译命令选项
- Bugzilla
- XML简介