系统启动时,数据动态加载业务若干思考
来源:互联网 发布:诺基亚5320软件下载? 编辑:程序博客网 时间:2024/06/14 09:53
当一个数据量比较大的系统,在启动时,如果采用静态加载的方式,消耗的时间让人抓狂,几分钟以上很正常。
举一个画面是三维的系统为例,在系统启动时,一个模型要显示在画面中,要做以下几方面工作:1.读取系统数据;2.跟据数据进行资源加载;3.把加载的画面显示出来;如果采用顺序加载方式,三个步骤挨个执行,当数据量较大时,用户需要等待几分钟才能进入到系统当中,造成极大的不便。
其中一种优化方式,是采用加载线程池的方法。
具体方法是系统启动后,创建一个线程池,池内比如有6个线程(线程池的度为6),那么可以同时处理6类模型的显示工作,配合资源的并发与同步,那么就实现了动态加载和显示,缩短了进入系统的等待时间,配和好资源加载优先级,那么用户的使用体验就得到了提高。
我觉得这种方法还有改进的地方,改进的方面主要从架构设计角度角度考虑。
6度的线程池,每一个度顺序完成1到3的工作,读取数据,进行加载,最后显示。我们假设现在有16个模型数据需要显示在画面中(实际情况是几万倍),每一步需要的时间是t ,那么最终这些模型显示出来的总时间是12/6×3t + 3t =8t。
如果将这1个6度的线程池,分为3个2度的线程池pool1,pool2,pool3,简称p1,p2,p3,p1负责执行数据读取,p2负责执行资源加载p3负责显示,那么原本3合1的一种作业类型,被拆分为3种作业类型,对应这3中业务需要。从设计角度讲,满足单一职责,降低耦合度,方便以后针对3种业务的升级改造,另外,当其中一个线程池空闲时,可以帮助处理其它业务作业,比如:开始时刻,6度全部用来读取数据,耗时1个t,6个数据读取进来以后,p2退出进行资源加载,p3与p1进行数据读取,当p2将资源加载进来后,p3退出读取数据,进行显示。也就是说,3个t 以后,3个线程池,回到了各自的本职工作。5t 的时候,p1结束读取,帮助p2进行加载,7t的时候,p1和p2结束记载,帮助p3进行显示,8t的时候全部工作结束。
消耗时间如下图:
时间效率上没有变化。
综上,从设计角度讲,改进方法似乎更优。
- 系统启动时,数据动态加载业务若干思考
- SpringMvc 系统启动时加载数据到内存中
- SpringMvc 系统启动时加载数据到内存中
- 动态数据采集业务逻辑
- 系统启动时加载模块出错的解决方案
- WEB系统启动时加载Log4j的配置文件
- 数据结构的若干思考
- Ext 动态加载数据
- Menu动态加载数据
- ListView数据动态加载
- Listview动态加载数据
- Listview动态加载数据
- ListView动态加载数据
- Listview动态加载数据
- checkBoxGroup动态加载数据
- 动态加载数据autoComplete
- SimpleAdapter 动态加载数据
- Listview动态加载数据
- 数据结构之堆栈的链式存储
- Android开发之Sqlite数据库
- 一种基于Qt的可伸缩的全异步C/S架构服务器实现(三) 流水线结构线程池设计
- C++大文件传输
- VC运行时库/MD、/MDd、/MT、/MTd说明
- 系统启动时,数据动态加载业务若干思考
- 淘宝校招笔试题2
- mac下使用和登录ssh云服务
- Javascript通过bind()掌控this
- hibernate使用createQuery(hql)语句仅查询部分字段,应如何获得数据
- poj3624 Charm Bracelet
- 丰田hi哦废话他废铜进口
- 改变背景颜色+碰撞检测
- System V消息队列(2)