移动终端加载网络图片算法探究

移动终端加载网络图片算法探究

ID:28474880

大小:62.50 KB

页数:11页

时间:2018-12-10

移动终端加载网络图片算法探究_第1页
移动终端加载网络图片算法探究_第2页
移动终端加载网络图片算法探究_第3页
移动终端加载网络图片算法探究_第4页
移动终端加载网络图片算法探究_第5页
资源描述:

《移动终端加载网络图片算法探究》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、移动终端加载网络图片算法探究摘要:随着移动设备的普及,越来越多的互联网应用都对加载图片的速度有很高的要求。在简要对比传统的同步和多线程两种加载图片方式后,给出相应地实现算法和评价。关键词:移动图片多线程算法中图分类号:TP316文献标识码:A文章编号:1007-3973(2013)009-102-031前言iOS、Android、WindowsPhone及Symbian等主流的移动操作系统现在均已支持加载jpg、png等常见格式的图片,随着应用对网络依赖程度的加强,这些操作系统也已支持直接从网络直接读取图

2、片。而读取只要给出该图片的http地址(URL)即可。对用户界面响应速度要求较高的应用而言,图片的加载速度不宜过慢。而随着如今终端屏幕分辨率的增加,用户对手机的图片质量也有了很高的要求。就单一服务器模式而言,以前流行的分布式算法显然达不到要求。2同步方式同步方式十分简单。由客户端向服务器提交请求,服务器对此做出应答一一应答的结果就是从远程向客户端返回符合要求的图片代码,图片接收完毕后再由客户端作解码、还原。同步方式的算法如下。客户端:BEGINActivatewebserviceSendrequestto

3、serverWaitforresponseDownloadcompleteEND服务器:BEGINReceivereqestsCreateresponsequeueWhilequeueisnotemptydequeuehandleeveryrequestEND这种方式的优点是简单,缺点也很明显:客户端增多时,服务器压力会陡然增大,而此种方式要求图片必须是连续加载,即客户端需要等待自己的加载要求出服务器队列时才会收到应答。图片一般比较大,所以它们都是在基本框架加载后才逐渐加载上的,整个加载的过程非常不雅观,

4、或者是从模糊逐渐变清晰,或者是从上往下拓展开(当然你也可以认为这些都是不错的特效)。3多线程方式3.1统一需求除了不能满足快速加载网络图片的要求以外,同步方式还存在诸多缺点。多线程方式通过采用不同的机制,不仅保证了快速加载图片的基本要求,更从流量上等方面具有较大的优势。3.2多线程与线程池由于程序的代码中存在着数据和控制依赖关系,单线程只能很有限地满足当今处理能力的要求。为了增加处理器的处理能力而一味地强化指令的执行顺序和细化分支,有时也不见得能事半功倍。因此,现代微处理器多采用硬件多线程技术来发掘线程之

5、间的线程级并行潜力。移动终端所采用的处理器多为ARM架构,很好地满足了多线程的处理要求。多线程技术主要解决处理器单元内多个线程并行执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。但如果对多线程应用不当,会增加对单个任务的处理时间。可以举一个简单的例子:假设在一台服务器完成一项任务的时间为T,它包括创建线程T1、执行任务T2、线程同步T3以及线程销毁的时间T4。显然,在理想状况下,T必然是这几部分的时间之和。可以看出Tl,T4是多线程本身的带来的开销,我们渴望减少Tl,T4,从而减

6、少T的时间。但是如果在程序中频繁地创建或销毁线程,会导致T1和T4在T中占有相当大比例,从而使整个执行的时间变长。这显然并没有很好地利用线程的并发性。线程池技术正是关注如何缩短或调整Tl,T4时间的技术,从而提高服务器程序性能的。它把Tl,T4分别安排在服务器程序的启动和结束的时间段或者一些空闲的时间段,这样在服务器程序处理客户请求时,不会有Tl,T4的开销了。另外,线程池不仅调整Tl,T4产生的时间段,而且它还显著减少了创建线程的数目。3.3常见系统的线程类Java中线程类Thread的继承关系为jav

7、a.lang.Thread,在C#中是System.Threading.Thread,而iOS支持NSThread等多个层次的多线程编程,层次越高的抽象程度越高,使用起来也越方便,也是苹果最推荐使用的方法。这些系统的线程类使用起来都非常方便,它将作为我们快速加载图片的基础。3.4多线程模式的算法为了不失一般性,我们约定,采用一种类似Ctt(当然也可以是Java)的语言来实现算法。3.4.1线程池的构造classThreadPoolAssume:isClosed,Queue,poolldandwait;//

8、是否关闭,队列,id,是否等待状态//构造函数,参数为线程池大小ThreadPool(size)InitializeQueueasaqueue;//创建新队歹1JFori:=0tosizeCreateandstartanewthread;//启动一个新线程//是否等待状态boolisWaitreturnwait//设置为等待voidsetWait(wait)wait:=wait;//向队列里加入一个新的任务,由工作线程去执行任

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。