多线程下载技术论文.docx

上传人:b****7 文档编号:9440566 上传时间:2023-02-04 格式:DOCX 页数:32 大小:291.94KB
下载 相关 举报
多线程下载技术论文.docx_第1页
第1页 / 共32页
多线程下载技术论文.docx_第2页
第2页 / 共32页
多线程下载技术论文.docx_第3页
第3页 / 共32页
多线程下载技术论文.docx_第4页
第4页 / 共32页
多线程下载技术论文.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

多线程下载技术论文.docx

《多线程下载技术论文.docx》由会员分享,可在线阅读,更多相关《多线程下载技术论文.docx(32页珍藏版)》请在冰豆网上搜索。

多线程下载技术论文.docx

多线程下载技术论文

摘要

线程可以理解为下载的通道,一个线程就是一个文件的下载通道,多线程也就是同时开起好几个下载通道.当服务器提供下载服务时,使用下载者是共享带宽的,在优先级相同的情况下,总服务器会对总下载线程进行平均分配.线程越多,下载速度越快.当前的下载软件都支持多线程技术.

通常服务器同时与多个用户连接,用户之间共享带宽。

如果N个用户的优先级都相同,那么每个用户连接到该服务器上的实际带宽就是服务器带宽的N分之一。

如果户数目较多,则每个用户只能占有可怜的一点带宽,下载将会是个漫长的过程。

具体研究内容:

下载功能实现,包括单线程下载功能,多线程下载功能,多任务下载功能,删除任务的实现。

断点续传等功能包括,下载过程中,暂停下载,承接上次未完成的下载任务。

关键词:

多线程;线程安全;断点续传

Abstract

ThelineChengcanunderstandthepassagefortimebeloadedwith,alineChengisadocumenttimebeloadedwithpassage,multiwireChengisjusttoopenupseveraltimebeloadedwithpassageatthesametime.Beingputintousedownloadingpersonistosharebandwidth'swhiletheserverprovidestimebeloadedwithservice,theaveragethegeneralservermeetingiscarriedoutongeneraltimebeloadedwithlineChengdistributesunderpreferentialstepisidenticalsituation.ThelineChengisgettingquickerasdownloadingspeedmuchmore.ThepopulartimebeloadedwithsoftwareallsupportsmultiwireCheng.Thesimultaneousandmanyconsumerofserverlinksupgenerally,sharesbandwidthbetweentheconsumer.Ifconsumer'sNpreferentialstepisallidentical,everyconsumerlinksNoneofmarkbeingserverbandwidthtoowingupperrealityofserverbandwidthso.Fruittheconsumernumberismore,everyconsumercanonlyoccupypitifullittlebandwidththen,downloadingthemeetingisendlessprocess.Studycontentconcretely:

Thetimebeloadedwithfunctionrealizes,includesthesinglelineChengtimebeloadedwithfunction,multi-threadtimebeloadedwithfunction,themultitaskingdownloadsafunction,deletethemissionrealization.Breakingpointaddsbiographywaitforafunctiontosuspendtimebeloadedwithinincluding,downloadingprocess,carriesonnotbecompletedtimebeloadedwithlasttimemission.

Keywords:

Multithreading;Threadsecurity;Broken/Resume

目录

1引言1

1.1网络下载技术3

1.2网络基本构架3

1.3多线程技术3

2.1课题的研究背景与意义3

2.1.1课题的研究背景3

2.1.2课题的研究意义4

2.1.3多线程下载的现状及发展趋势4

2.2可行性分析5

2.2.1技术可行性5

2.2.2操作可行性6

3相关基础知识以6

3.1JAVA中的多线程与线程安全6

3.1.1Java中的多线程6

3.1.2Java中的线程安全7

3.2Http协议简介8

3.3断点续传原理8

4需求分析10

4.1用户需求分析10

4.2业务流分析11

5.整体设计11

5.1系统设计要点11

5.2系统总体功能结构12

5.3开发环境:

myeclipse+SWT15

5.4URL类和URLConnection类的使用15

6.系统实现16

6.1用户界面实现16

6.2下载任务实现20

6.2.1下载任务类图20

6.2.2下载任务顺序图20

6.2.3下载任务具体实现21

6.3监控下载信息设计25

6.3.1监控下载信息类图25

6.3.2监控下载信息顺序图26

6.3.3监控下载信息实现26

结论27

参考文献28

致谢29

1引言

1.1网络下载技术

网络下载技术一直是网络发展的重要推动力之一。

原先的信息资源共享主要通过Wed技术实现,即先把共享的文件放到服务器上,然后客户机便可以通过HTTP和FTP等协议从服务器下载这些文件,这就是所谓的C/S结构。

随着网络应用及网络用户的大量增加,Wed服务器需要对非常多的用户访问提供支持,这使得Wed服务器的性能成为了这类下载技术的最大瓶颈。

这种情况下,以资源分散、负载均衡和非中心化为特点的PZP技术在文件共享领域得到了巨大的发展,它将共享的文件存储在客户机结点上,用户之间可以直接共享和传输文件而不需要通过中央服务器,此外,PZP技术还可以充分利用参与结点的带宽,通过大量结点之间互相传递数据、合作下载的方式来提高网络中传送大容量文件的效率,例如BitT0rrent、eDonke岁eMule等。

虽然PZP技术以完全脱离中心服务器为研究的重点,但目前在网络下载的实际应用中,服务器模式还仍然发挥着不可替代的作用,所以就发展出了一种所谓的PZSP技术,也就是PeertoServerandPeer技术。

其实不过是传统C/S方式和一些PZP技术的结合,可以认为是一个NaPster网络、BitTorrent网络和传统wed网络的混合体,实际上仍然属于一种中心非结构化的PZP网络。

PZSP技术利用一个中心服务器来存放大量的下载资源链接信息(URL),当客户请求下载某个资源时,中心服务器就将相关的下载链接和一个peer的列表返回给客户,让客户从多个服务器下载资源的同时也将获得的资源上传给其他peers。

PZSP在国内以迅雷的代表取得了巨大成功。

对应以上网络技术的发展,就国内最普遍的应用而言,可以分为三个阶段:

第一个阶段,以HTTP、FTP为主,并发展出了多线程下载方式,以FlashGet、NetAts为代表。

这种下载模式由于受到服务器带宽的限制会严重影响下载的速度。

第二个阶段,以BT和eMule为代表的PZP方式,其主要特征是下载源分布在众多个人终端电脑上,这种方式避免了单一带宽对下载速度的影响,然而由于下载育源头是个人电脑,其稳定性受到了一定的制约。

第三个阶段,以迅雷等为代表。

整合了网络搜索、HTTP下载、FTP下载和P2P(BT、eMule)下载等多种技术,这种方式将多个Web服务器和客户一起组成PZP网络,保证了下载的速度和稳定性

1.2网络下载基本构架

网络下载基本构架主要包括两种:

C/S与P2P架构。

传统的C/S网络发展出了HTTP压TP下载,并在客户端发展出了多线程下载方式;而P2P网络则发展出了BT、eMule这样的多源文件传输方式。

传统的HTTP/FTP下载方式都是属于C/S架构,即客户端/服务器架构。

这种模式的基本方法是将共享文件上传服务器上,而需要这些文件的用户再向服务器索取和下载共享文件,也就意味着来自各个客户端的大量的上传下载数据都必须经过服务器这个中转站。

BT协议则是属于P2P架构,即PeertoPeer。

虽然对于PZP并没有一个统一的定义或标准,但PZP都有一个共同点就是充分利用各结点的资源,形成一个自组织网络,在网络中每个结点都是对等的,既享受别人的服务也为别人提供服务,传输文件数据时不再需要经过服务器。

1.3多线程技术

传统操作系统中的单线程进程由进程控制块和用户地址空间、以及管理进程执行的调用/返回行为的系统堆栈或用户堆栈构成。

如果把进程的管理和执行相分离,进程作为操作系统中进行保护和资沮分配的单位,允许一个进程中包含有多个可并发执行的控制流,这些控制流切扒时不必通过进程调度,通信时可以直接借助于共享的内存区,这就形成了多线积进程。

下图单线程进程和多线程进程的模型。

目前,大多数操作系统都采用多线内核模型,支持多线程(结构)进程,如:

Solaris2.x,Mach2.6,05/2,windowsNT,Chorus等。

因而,对于应用软件的开发来说,出现了另外一种设计思路,即并发多线程程序设计的方法。

合理的多线程软件结构,可以使得系统性能获得较大提高,具体表现在:

1.改进程序结构。

对许多程序来说,如果把程序分成多个独立或半独立的执行单元,而不是把程序设计成一个单一的复杂流程,将使程序有更高效的结构。

2.快速线程切换,改进程序的实时响应能力。

多个服务器程序的任务能够单独以线程的方式执行,而线程的切换可以在同一个进程内进行,不需要在应用程序中维护人为的切换界面。

客户程序也不用担心它们的请求会由于其他客户程序的请求所要时间太长而别拒绝。

3.减少(系统)管理开销,(线程)通信易于实现,节省内存空间。

4.并行程度提高。

在单个处理器上运行一个多线程进程,系统将在多个线程之间切换处理器资源,即轮流为这些线程分配时间片,也就是并发执行。

 

2.1课题的研究背景与意义

2.1.1课题的研究背景

以往我们开发的程序大多是单线程的,即一个程序只有一条从头至尾的执行线索。

然而现实世界中的很多过程都具有多条线索同时动作的特性。

例如,我们可以一边看电视,一边活动胳膊,如果不容许这样做,我们会感觉很难受。

再如一个网络服务器可能需要同时处理多个客户机的请求等。

Java语言的一大特性就是内置对多线程的支持。

多线程是指同时存在几个执行体,按几条不同的执行线索共同工作的情况,它使得编程人员可以很方便地开发出具有多线程功能、能同时处理多个任务的功能强大的应用程序。

虽然执行线程给人一种几个事件同时发生的感觉,但这只是一种错觉,因为我们的计算机在任何给定的时刻只能执行那些线程中的一个。

为了建立这些线程正在同步执行的感觉。

Java快速地把控制从一个线程切换到另一个线程。

 多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。

如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需要设想各个线程是同时执行即可。

  自从“多线程下载”技术发明以来,这项技术得到前所未有的关注已是不争的事实。

在“网络蚂蚁”软件流行开后,许多下载软件也都纷纷效仿,是否具有“多线程下载”技术、甚至能支持多少个下载线程都成了人们评测下载软件的要素。

“多线程下载”的基础是WEB服务器支持远程的随机读取,也即支持“断点续传”。

这样,在下载时可以把文件分成若干部分,每一部分创建一个下载线程进行下载。

2.1.2课题的研究意义

多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行,由此带来的线程调度问题。

由于是多线程进行断点续传,还要考虑记录多个断点位置,且记录断点位置时也要考虑同步互斥等问题。

所有这些都使得这一步比较复杂。

但是可以明显提高网络文件的下载速度。

现在,不要说编写专门的下载软件,在自己编写的软件中,加入下载功能有时也非常必要。

如让自己的软件支持自动在线升级,或者在软件中自动下载新的数据进行数据更新,这都是很有用、而且很实用的功能。

2.1.3多线程下载的现状及发展趋势

浏览器属于第一代下载工具。

这种工具除了具有多任务属性以外,其自动化程度也是比较高的。

就下载软件而言,只要点击的链接指向的文件名称具有.exe或者.zip扩展名,就能够打开供用户选择保存到本地计算机上的对话框。

第一代下载工具主要的缺点有两个:

一个是用户自己不能方便地定制所能够下载的文件的类外一个就是下载的过程一旦中途因为意外情况中断,已经下载过来的那些数据就作废了。

为了克服这种缺点,人们专门开发了优化下载过程的工具软件。

最早的就是以当时的GetRight、Go!

Zilla以及NetVampire等为代表的断点续传下载工具。

这种工具的优点就是能够具体地管理下载的过程,即使中断了,也可以重新接着中断的地方下载。

实际上,专用的下载工具不但从这方面进行了优化,而且将其它更多的与下载有关的功能都集成进来,如下载以后文件的保存与管理、病毒自动扫描以及自动定时下载、可任意定制能够下载的文件类型等等。

可以说,经典的断点续传工具属于第二代下载工具。

2.2可行性分析

可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。

要达到这个目的,必须分析几种主要的可能解法的利弊,从而判断原定的系统规模和目标是否现实,系统完成后所能带来的效益是否大到值得投资开发这个系统的程度。

因此,可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。

系统的可行性分析主要包括技术上的可行性和操作上的可行性。

2.2.1技术可行性

下载程序功能模块的实现主要利用了面向对象的Java高级编程语言。

使用Java作为开发工具主要是因为Java是目前比较流行而且非常成功的编程语言。

多线程编程技术是Java语言的重要特点。

多线程编程的含义是将程序任务分成几个并行的子任务。

特别是在网络编程中,有很多功能是可以并发执行的。

Java中实现多线程的类有两种方法:

1.扩展java.lang.Thread类,用它覆盖Thread类的run方法。

2.生成实现java.lang.Runnable接口的类并将其它的实例与java.lang.Thread实例相关联。

  Thread类是负责向其它类提供线程支持的最主要的类,要使用一个类具有线程功能,在Java中只要简单地从Thread类派生一个子类就可以了。

扩展Thread类,如printThread.java。

由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。

Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。

由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是synchronized关键字,它包括两种用法:

synchronized方法和synchronized块。

本系统使用Eclipse的SWT图形界面技术进行开发,以HttpClient包进行支持,上述两个软件或是开发包均为免费下载,十分方便。

2.2.2操作可行性

下载程序的具备友好的用户界面,而且操作简单易于被用户接收,使用此下载程序十分方便,因为软件的操作思路比较清晰,而且用户实际操作的内容较少,所以用户只需要熟练操作计算机即可。

因此从使用操作方面看,此系统得开发是可行的。

3相关基础知识

3.1JAVA中的多线程与线程安全

3.1.1Java中的多线程

Java不仅是一门语言,它已成为一门技术,例如Java芯片技术、Java编译技术、基于Java的信息家电联网技术(Jini)等,并以它的平台独立性、健壮性、Java虚拟机技术等特点受到广大编程者青睐。

Java能把所有东西从桌面计算机平稳地转换成基于网络的计算,它是Web浏览器中必须具备的技术,是一个完全面向对象的语言,是有利于处理网络协议的程序综合库。

线程是从一个完整应用程序分出的单独的处理步骤,是程序内部的一个顺序控制流。

一个小程序中可含1个或多个线程并可同时运行,由于单线程一旦运行就独占线程的所有时间资源,而多线程的出发点就是提高系统的并发性,因此,引人注意的不是一个单独的线程,而是在一个程序中实现多个线程,它意味着一个程序的多行语句同时执行,即用抢占资源的方式对多个线程实现轮流执行。

例如HotJava浏览器就是一个多线程的应用实例。

在Java语言中,多线程编程已成为编程的一个有效工具,可编制出界面友好、效率高的应用程序。

  Java内在支持多线程,其线程由3部分组成:

  

(1)虚拟CPU,封装在Java.lang.Thread类中。

  

(2)CPU所执行的代码,传送给Thread类。

  (3)CPU所处理的数据,传送给Thread类。

  Java通过多线程有效地实现了多任务的并发执行,所以,在Java多线程编程中,不仅考虑多线程自身的问题分析,还应注意各线程在调度中出现的各种情况。

3.1.2Java中的线程安全

当对一个复杂对象进行某种操作时,从操作开始到操作结束,被操作的对象往往会经历若干非法的中间状态。

调用一个函数(假设该函数是正确的)操作某对象常常会使该对象暂时陷入不可用的状态(通常称为不稳定状态),等到操作完全结束,该对象才会重新回到完全可用的状态。

如果其他线程企图访问一个处于不可用状态的对象,该对象将不能正确响应从而产生无法预料的结果,如何避免这种情况发生是线程安全性的核心问题。

线程同步提供了保证不同线程按适当顺序使用共享资源的工具。

线程可直接访问共享数据,既有相互之间高效通信的优点,也有线程间任意相互干扰的弊端。

安全的多线程数据使用方案要求不同线程处理不同的数据,即多个线程不能共享临界区。

例如:

有10张车票供2个顾客预定,而又要求2个顾客尽可能多地预定10张车票,这10张车票作为共享资源,可能导致1张票预定给2个顾客的情况,针对这种情况,设计时应采用正确的同步机制。

若2个线程同步执行时需要相互打开,就会出现1个线程依赖于另1个要打开的线程而形成死锁。

它不是资源不够引起的,而是由线程的调度引起的。

对于死锁可用下述方法解决:

  

(1)尝试在尽可能短的时间内执行锁定的代码,占用时间越长,另一线程出现和需要对象的可能性越大。

  

(2)当我们从另一个被同步的方法中激活被同步的方法时要小心,最好是清楚地定义每个线程的任务,并考虑使用什么数据和什么时候使用。

  总之,在多线程程序设计中,要充分考虑各种可能出现的情况,并用适当的方法给予解决,使线程在运行过程中按所预期定义的目标进行。

3.2Http协议简介

HTTP是Web协议集中的重要协议,它是从客户机/服务器模型发展起来的。

客户机/服务器是运行一对相互通信的程序,客户与服务器连接时,首先,向服务器提出请求,服务器根据客户的请求,完成处理并给出响应。

浏览器就是与Web服务器产生连接的客户端程序,它的端口为TCP的80端口。

举一个大家都很常见的例子,浏览器与Web服务器之间所遵循的协议就是HTTP。

Web的应用层协议HTTP是Web的核心。

HTTP在Web的客户程序和服务器程序中得以实现。

运行在不同端系统上的客户程序和服务器程序通过交换HTTP消息彼此交流。

HTTP定义这些消息的结构以及客户和服务器如何交换这些消息。

HTTP定义Web客户(即浏览器)如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户。

3.3断点续传原理

其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。

打个比方,浏览器请求服务器上的一个文件时,所发出的请求如下:

假设服务器域名为,文件名为down.zip。

GET/down.zipHTTP/1.1

Accept:

image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/vnd.ms-

excel,application/msword,application/vnd.ms-powerpoint,*/*

Accept-Language:

zh-cn

Accept-Encoding:

gzip,deflate

User-Agent:

Mozilla/4.0(compatible;MSIE5.01;WindowsNT5.0)

Connection:

Keep-Alive

服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下:

200

Content-Length=106786028

Accept-Ranges=bytes

Date=Mon,30Apr200112:

56:

11GMT

ETag=W/"02ca57e173c11:

95b"

Content-Type=application/octet-stream

Server=Microsoft-IIS/5.0

Last-Modified=Mon,30Apr200112:

56:

11GMT

所谓断点续传,也就是要从文件已经下载的地方开始继续下载。

所以在客户端浏览器传给Web服务器的时候要多加一条信息----从哪里开始。

下面是用自己编的一个"浏览器"来传递请求信息给Web服务器,要求从2000070字节开始。

GET/down.zipHTTP/1.0

User-Agent:

NetFox

RANGE:

bytes=2000070-

Accept:

text/html,image/gif,image/jpeg,*;q=.2,*/*;q=.2

仔细看一下就会发现多了一行RANGE:

bytes=2000070-,这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。

服务器收到这个请求以后,返回的信息如下:

206

Content-Length=106786028

Content-Range=bytes2000070-106786027/106786028

Date=Mon,30Apr200112:

55:

20GMT

ETag=W/"02ca57e173c11:

95b"

Content-Type=application/octet-stream

Server=Microsoft-IIS/5.0

Last-Modified=Mon,30Apr200112:

55:

20GMT

和前面服务器返回的信息比较一下,就会发现增加了一行:

Content-Range=bytes2000070-106786027/106786028

返回的代码也改为206了,而

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机软件及应用

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1