基于缓存技术的多线程下载软件的改进研究
2018-01-05谌颃
谌颃
摘 要:本文通过对WEB浏览器访问网络资源特性的研究,将浏览器缓存技术应用到下载软件系统,提出一种新的基于图片资源缓存的下载软件设计方法,可实现多线程、断点续传、限速等功能,改进了传统软件下载图片时的不足。测试结果表明,该设计具备良好的稳定性和可行性,图片资源下载速度较传统软件有了较大提升。
关键词:多线程;断点续传;下载;图片缓存
中图分类号:TP301 文献标识码:A
Abstract:Based on the characteristics of web browsers to access network resources,the study applies the browser cache technology into the download software and puts forward a new download software design method based on image resource cache,which can achieve the functions of multi-thread transferring,broken-point continuingly-transferring and download rate restriction,etc.,and improve the image download through the traditional software.The test results show that the design has good stability and feasibility,and the image download rate is greatly increased.
Keywords:multi-thread;broken-point continuingly-transferring;download;image cache
1 引言(Introduction)
互联网的飞速发展促进了网络资源爆炸式成长。用户通常使用浏览器获取网络资源信息,而通过下载软件下载资源则成为用户最普遍的应用[1],主流的下载软件国内有迅雷、快车,国外有Orbit、TuoTu和电驴等。
研究浏览器访问网络资源的特点发现,为了提高网页访问速度,通常它会采用累积式加速的方法,即将曾经访问过的网页内容,如图片、cookie等存放到本地的缓存区域,当有访问请求时,浏览器将首先搜索该目录。如果内容已存在,则直接从缓存中读取内容,以此达到提高访问速度的目的。本课题基于IE浏览器缓存机制,将该技术应用到下载软件系统的设计中,提出了一种基于图片资源缓存的下载软件设计方法,改进了传统软件下载图片资源的不足。
2 主要技术原理分析(Main technical principle
analysis)
2.1 线程与线程同步
本系统采用了线程技术,与进程相比,线程的主要特点有:轻型实体,独立调度,可并发执行,共享进程资源[2]。由于线程很“轻”,故线程的切换非常迅速而且开销小,并发执行和共享资源方面优于进程。
线程同步的主要任务是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程能有效地共享资源和相互合作[3],从而使程序的执行具有可再现性。
2.2 图片缓存下载机制
基于浏览器缓存机制,用户下载网页图片资源时,可以先查找缓存区域。如果目标图片已经存在,则从缓存中下载;如果不存在,则从远程服务器下载。本文所述方法采用基于IE浏览器缓存机制实现,具体步骤在第五部分详细阐述。
2.3 下载限速原理
本文提到的限速是指下载客户端的限速,而并非服务器端的限速。由于网络资源下载会占用较大带宽,必须对下载流量进行限制。本设计采用线程休眠来减少流量请求,从而实现流量限制。
3 多线程下载软件系统设计(Multi-threaded
download software system design)
3.1 系统整体框架
系统基于.NET平台开发,采用面向对象的方法与双层架构并行的设计理念。双层结构包括表示层与逻辑层。逻辑层提供一切逻辑上的处理,如下载、切割文件等;表示层是用户的功能界面。在分层架构的思想指导下,逻辑层与表示层具有较小的关联性,易于后期的维护和修改。
3.2 系统核心类交互关系及功能
本系统采用面向对象的编程思想,所有核心的代码都由类构成。系统下载类主要有下载模型DownloadBase、基于FTP下载的类FTPDownload、基于HTTP下载的类HttpDownload、基于P2P下载的类P2PDownload。其中DownloadBase为其他三个类的父类,继承关系如图1所示。
4 功能实现(Function implementation)
4.1 基于HTTP与FTP多线程断点续传核心技术实现
本文以FTP为例阐述断点续传实现过程。当程序运行时,根据URL启动多条线程连接FTP服务器,出于避开防火墙的考虑,连接方式采用消极模式。当客户端连接至FTP服务器时,发送RETR命令以获取FTP上的文件。此过程并不是将文件数据一次性传输给客户端,而是一步步传输。一般一次传输数据的大小即为缓存下载的大小,并且每条线程负责不同的数据段,每个数据段的大小除最后一条线程外都相等。获取到数据后,客户端再将数据从内存中多线程并发写入到硬盘。
4.2 断点续传具体实现方法
斷点续传指的是在用户暂停下载时,系统应保存已经下载时的数据,并记录暂停下载时数据写到的位置[4];当用户重新启动下载时,系统能自动下载剩余尚未完成的数据。断点续传主要用于下载较大文件。
4.3 下载限速算法
由于多线程技术可能会占用大量的网络带宽,影响用户其他的网络活动[5],因此要对下载流量进行限制。本设计使用线程休眠技术实现流量限制[6],其流程图如图2所示。
具体实现如下:
假设使用N条线程下载远程文件F,每条线程所使用的下载缓存大小设为S字节,并且获取S字节所需实际时间为T毫秒,限速目标值为V',则线程具体休眠时间的算法如下:
步骤1:求出理想的线程休眠时间T'=S/V',比较T与T'的大小。若T>=T',则表示获取S字节的缓存所需时间大于理想休眠时間。换言之,当前下载速度慢于限速目标值V',无须进行限速操作;反之,如果T 步骤2:由于T 步骤3:由于是使用多线程下载,即N条线程并发下载,因此,每条线程下载休眠时间应为TN=Tx/N毫秒。 4.4 IE图片缓存下载的实现 本设计中的图片缓存下载技术使用基于IE浏览器缓存机制来实现,其流程图如图3所示。由于采用了图片缓存下载技术,下载速度有了极大的提高,最好的情况下将达到硬盘的读写速度,如22M/S。 4.5 网页图片识别筛选功能 传统下载软件在下载网页图片时,往往是将所有图片下载,而实际上用户只需要下载感兴趣的图片。基于此,本设计增加了网页图片识别筛选功能模型。该模型将图片的长宽大小范围设定在300×300—1600×1600,以此作为用户选择下载的条件。基于此筛选模型下载到符合要求的图片准确率比较高,一般可高达88%,其分析详见5.3节。 5 运行分析与测试(Application analysis and test) 5.1 多线程断点续传下载的测试 本节对多线程断点续传功能进行测试,测试资源是在互联网任意选取的6个远程资源文件,所得测试数据见表1。从表1中可知6个目标资源均成功下载至本地,且文件完整,说明本设计的多线程断点续传下载技术已经实现成功。 5.2 图片缓存下载技术性能分析 本文4.4节介绍了IE图片缓存下载技术的实现方法,本节就对该技术的性能与迅雷软件进行对比分析。本实验的数据源是从互联网上任意选取20个网页,实验中对比了两种下载软件的性能,结果见表2。在全部缓存到本地的情况下,缓存下载技术下载速度较传统下载技术有了很大的改进。 依据表2,可得两种方法下载时间比较的柱形图,如图4所示。 从图4中可明显地看到,相同的图片资源下载,运用了缓存技术的下载软件下载耗时很小。对比二者,下载差距如图5所示。 从中可以看到,当下载网页中26张图片的时候,迅雷下载耗时是图片缓存下载技术的3500多倍,即使在差距最小的情况下,迅雷下载耗时也是后者的200多倍。由实验分析可知,图片缓存下载技术无论是在下载速度上,还是在占用本地资源上,较传统下载软件有较大优势。 5.3 网页图片识别筛选准确率分析 本实验使用了表2的20个网页进行识别筛选测试,其结果如图6所示。 由图可知,20个网页中有15个识别率高达100%,有4个识别率超过50%,只有1个识别率为0。从所选用的20个网页来看,本图片筛选模型平均准确率达到了88%。 结合此识别模型与图片缓存下载技术,可形成一个完整的下载方案:一方面提高了识别用户目标图片的准确度,另一方面下载的速度有着质的飞跃。 6 结论(Conclusion) 本设计运用了下载限速、断点续传、多线程、缓存下载等技术,取得了良好的实现效果,最大限度利用了带宽,提高了下载效率。针对目前主流下载软件存在的不足,提出基于浏览器缓存特性实现的图片缓存下载方法,显著改善了图片资源下载速度。 参考文献(References) [1] 周学威,闫鑫,赵榉云,等.基于SOCKET的多线程下载工具的开发[J].电子测试, 2011(08):104-106. [2] 杨代庆,王志苹,王星,等.一种断点续传的多线程新闻组抓取方法及存储结构[J]. 现代图书情报技术,2011(02):29-33. [3] 眭俊华,刘慧娜,王建鑫,等.多核多线程技术综述[J].计算机应用,2016(06):239-242. [4] 王莉敏,梁正和,段全锋.基于HTML5大文件断点续传的实现方案[J].计算机与现代化,2016(03):91-95. [5] 王枫,罗家融.Linux下多线程Socket通讯的研究与应用[J].计算机工程与应用,2004(16):106-109. 作者简介: 谌 颃(1980-),男,硕士,高级工程师.研究领域:网络信息系统,图像识别,数据挖掘,云计算,个性化推荐技术.