多线程下载方法和装置与流程

文档序号:11628712阅读:201来源:国知局
多线程下载方法和装置与流程

本发明涉及网络技术领域,特别是涉及一种多线程下载方法和装置。



背景技术:

随着互联网技术的发展,人们可以从网络上通过下载来获取各种各样的资源。如果通过单线程下载,由于tcp窗口大小的限制,单线程下载很难充分利用网络带宽,下载速度不能得到充分的发挥。所以越来越多的下载工具和网站开始允许用户进行多线程下载。线程可以理解为下载的通道,一个线程就是一个文件的下载通道,多线程也就是同时开启多个下载通道。通过开启多线程下载,同时开启多个下载通道,能够提高带宽利用率,并提高下载速度。

但是一般的多线程下载工具需要用户手动或系统自动设置并发线程数量,而且并发线程数量一旦确定,在整个文件下载过程中便不会发生变化。当并发线程数量过多,会导致每个线程分配的下载片段的过小,从而造成多余的系统开销,而且还会占满带宽,造成网络拥塞,导致数据延迟和丢失的可能性大大增加,使下载速度不增反减。当并发线程数量过少,又会导致不能充分利用带宽,从而会造成下载速度慢。而且网络环境经常是不稳定的,网络数据的传输速度并不能一直保持稳定,下载时,预先设置的并发线程数量,很难在充分利用带宽的同时,尽量减少系统资源开销。



技术实现要素:

基于此,有必要提供一种多线程下载方法和装置,能够在充分利用网络带宽的同时,减少系统资源开销。

一种多线程下载方法,包括:

接收下载指令,根据下载指令开启预设并发线程数量的线程对目标文件进行下载;

在下载的过程中执行:增加或减少线程,每次增加线程后,若增加线程后的下载速度大于增加线程前的下载速度,则继续增加线程,否则减少线程;每次减少线程后,若减少线程后的下载速度大于减少线程前的下载速度,则继续减少线程,否则增加线程。

在其中一个实施例中,在接收下载指令,根据下载指令开启预设数量的线程对目标文件进行下载之前,还包括:

获取网络类型,根据网络类型设置对应的预设并发线程数量。

在其中一个实施例中,每次增加线程后,若增加线程后的下载速度大于增加线程前的下载速度,则继续增加线程,否则减少线程,包括:

每次增加线程后,经过预设时间开始比较增加线程后的下载速度与增加线程前的下载速度,若增加线程后的下载速度大于增加线程前的下载速度,则继续增加线程,否则减少线程;

每次减少线程后,若减少线程后的下载速度大于减少线程前的下载速度,则继续减少线程,否则增加线程,包括:

每次减少线程后,经过预设时间开始比较减少线程后的下载速度与减少线程前的下载速度,若减少线程后的下载速度大于减少线程前的下载速度,则继续减少线程,否则增加线程。

在其中一个实施例中,每次增加线程后,若增加线程后的下载速度大于增加线程前的下载速度,则继续增加线程,否则减少线程,包括:

每次增加线程后,若增加线程后的下载速度大于增加线程前的下载速度,且增加线程后的下载速度未超过预设下载速度阈值,则继续增加线程,否则减少线程;

每次减少线程后,若减少线程后的下载速度大于减少线程前的下载速度,则继续减少线程,否则增加线程,包括:

每次减少线程后,若减少线程后的下载速度大于减少线程前的下载速度,且减少线程后的下载速度未超过预设下载速度阈值,则继续减少线程,否则增加线程。

在其中一个实施例中,方法还包括:

当所有线程的下载任务都已完成时,将所有文件片段组合成目标文件。

一种多线程下载装置,包括:

下载模块,用于接收下载指令,根据下载指令开启预设并发线程数量的线程对目标文件进行下载;

线程控制模块,用于在下载过程中,增加或减少线程,每次增加线程后,若增加线程后的下载速度大于增加线程前的下载速度,则继续增加线程,否则减少线程;每次减少线程后,若减少线程后的下载速度大于减少前的下载速度,则继续减少线程,否则增加线程。

在其中一个实施例中,装置还包括:

线程设置模块,用于在接收下载指令,根据下载指令开启预设数量的线程对目标文件进行下载之前,获取网络类型,根据网络类型设置对应的预设并发线程数量。

在其中一个实施例中,线程控制模块用于在下载过程中,增加或减少线程,每次增加线程后,经过预设时间开始比较增加线程后的下载速度与增加线程前的下载速度,若增加线程后的下载速度大于增加线程前的下载速度,则继续增加线程,否则减少线程;

线程控制模块还用于每次减少线程后,经过预设时间开始比较减少线程后的下载速度与减少线程前的下载速度,若减少线程后的下载速度大于减少线程前的下载速度,则继续减少线程,否则增加线程。

在其中一个实施例中,线程控制模块还用于在下载过程中,增加或减少线程,每次增加线程后,若增加线程后的下载速度大于增加线程前的下载速度,且增加线程后的下载速度未超过预设下载速度阈值,则继续增加线程,否则减少线程;

线程控制模块还用于每次减少线程后,若减少线程后的下载速度大于减少线程前的下载速度,且减少线程后的下载速度未超过预设下载速度阈值,则继续减少线程,否则增加线程。

在其中一个实施例中,装置还包括:

文件组合模块,用于当所有线程的下载任务都已完成时,将所有文件片段组合成目标文件。

上述多线程下载方法和装置,在下载的过程中,通过动态调节并发线程数量,当增加并发线程数量能使下载速度加快时,继续增加并发线程数量,否则减少并发线程数量;当减少并发线程数量能使下载速度加快时,继续减少并发线程数量,否则增加并发线程数量,能够使下载速度一直保持最快,下载过程中能够一直充分利用带宽,且尽量减少系统资源开销。

附图说明

图1为一个实施例中多线程下载方法的流程图;

图2为一个实施例中线程数量调控的流程图;

图3为另一个实施例中线程数量调控的流程图;

图4为一个实施例中多线程下载装置的模块图;

图5为另一个实施例中多线程下载装置的模块图。

具体实施方式

为了使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施例作进一步的详细描述。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,在一个实施例中,提供了一种多线程下载方法。该方法具体包括如下步骤:

步骤101,接收下载指令,根据下载指令开启预设并发线程数量的线程对目标文件进行下载。

在本实施例中,当终端接收到下载指令后,首先会根据目标文件的大小在本地分配相应大小的空间用于存放目标文件,然后根据预设并发线程数量,将目标文件分成相应数量的多段,然后开启相应数量的线程分别对这些目标文件段进行下载,当所有线程的下载任务都完成了的时候,整个目标文件就全部被下载到本地中。

步骤103,在下载的过程中执行:增加或减少线程,每次增加线程后,若增加线程后的下载速度大于增加线程前的下载速度,则继续增加线程,否则减少线程;每次减少线程后,若减少线程后的下载速度大于减少线程前的下载速度,则继续减少线程,否则增加线程。

在本实施例中,通过在下载过程中动态调节并发线程数量,使得开启最少数量的线程能够使下载速度保持最大,能够充分利用网络带宽,并且尽量减少系统资源的消耗。

在一个实施例中,步骤103的具体流程如图2所示,包括以下步骤:

步骤1031,增加线程。

步骤1033,判断增加线程后的下载速度是否大于增加线程前的下载速度,若是,则返回步骤1031,若否,进入步骤1035。

步骤1035,减少线程。

步骤1037,判断减少线程后的下载速度是否大于减少线程前的下载速度,若是,则返回步骤1035,若否,则返回步骤1031。

在本实施例中,先增加还是先减少线程对整个并发线程数量调整的结果是没有影响的。本实施例中,先增加线程,若增加线程后的下载速度大于增加线程前的下载速度,则表明增加线程数量前并没有充分利用带宽,增加线程后,网络带宽可能仍未被充分利用,下载速度可能存在继续提升的空间,所以继续再增加线程。

若增加线程数量后的下载速度不大于增加线程前的下载速度,则表明当前线程数量已经将带宽全部占满,并且造成了网络拥塞,此时可减少线程,以避免网络拥塞。

若减少线程后的下载速度大于减少线程前的下载速度,则表明减少线程前就已经将带宽占满,减少线程后,虽然减轻了网络拥塞,但网络拥堵的问题仍有可能未被消除,所以需要继续减少线程数量。若减少线程数量后的下载速度小于减少线程前的下载速度,则表明减少线程前的线程数量比减少线程后对带宽的利用更加充分,所以需要增加线程数量。

由于下载环境会随着时间一直变化,每次完成一遍增减线程的过程后,将会继续循环这个过程,使线程数量随着网络状况、系统状况等环境变化一直保持着使下载速度最大,充分利用带宽,且尽量减少系统资源消耗的状态。

但是,下载环境随着时间变化也是需要一定时间的,一般情况下,下载环境并不会突然在短时间内发生很大的变化。所以当经过了一遍增减线程的操作后,调整后的线程数量能够在一定时间段内保持充分利用带宽且尽量减少系统资源消耗的最佳状态。如果立刻继续循环增减线程的过程,会导致线程数量一直在调整,无法保持这个最佳状态。所以在每次完成一遍增减线程的过程后,可以经过预设时间后再循环进行增减线程的过程,使得多线程下载能够在一段时间内保持对带宽的充分利用且尽量减少系统资源开销的最佳状态。具体的经过多长时间再循环增减线程的过程可以由人为设置,也可以由系统自动根据当前网络波动情况进行调整。

在调整线程数量时,每次可以增加或减少多个线程,也可以每次只增加或减少一个线程。每次增加或减少多个线程可以使开启的线程数量尽快达到使带宽资源充分利用,且尽量减少系统资源消耗的状态,但由于每次增加或减少的线程过多,将会导致对线程数量调控不够精确;每次也可以只增加或减少一个线程,但这样又会使线程数量调控的过程变长。为了解决这些问题,在一个实施例中,每次先增加或减少多个线程,当完成一遍增减线程的过程后,再将每次增加线程或减少线程的数量调整为一个,能够将线程调控又快又精确地调整至既能充分利用带宽,又能尽量减少系统资源消耗的状态。

在一个实施例中,在接收下载指令,根据下载指令开启预设数量的线程对目标文件进行下载之前,还包括:获取网络类型,根据网络类型设置对应的预设并发线程数量。

在本实施例中,在开启下载任务之前,还要获取当前连接的网络类型,网络类型包括有线网和无线网,无线网又包括wifi和移动互联网,而移动互联网又包括2g网络、3g网络、4g网络等。根据所连接的网络类型,可以初步判断带宽大小,为带宽大的网络如wifi或4g网络等设置更多的并发线程数量,为带宽小的网络如2g网络等设置更少的并发线程数量。

在本实施例中,通过获取网络类型,根据网络类型设置对应的预设并发线程数量,可以使预设并发线程数量更加接近既能够充分利用带宽,又能尽量减少系统消耗的并发线程数量的最佳值,使得在下载的过程中,能够更加快速将并发线程数量调节到最佳值。

在一个实施例中,每次增加线程后,若增加线程后的下载速度大于增加线程钱的下载速度,则继续增加线程,否则减少线程,包括:每次增加线程后,经过预设时间开始比较增加线程后的下载速度与增加线程钱的下载速度,若增加线程后的下载速度大于增加线程前的下载速度,则继续增加线程,否则减少线程;每次减少线程后,若减少线程后的下载速度大于减少线程前的下载速度,则继续减少线程,否则增加线程,包括:每次减少线程后,经过预设时间开始比较减少线程后的下载速度与减少线程前的下载速度,若减少线程后的下载速度大于减少线程前的下载速度,则继续减少线程,否则增加线程。

在本实施例中,每次增加或减少线程数量后,下载速度都可能会发生变化,而下载速度的变化是需要一个过程的,如果每次增加或减少线程数量后,立即检测其下载速度,这时的下载速度还没有达到稳定状态,检测到的下载速度的可信度很低,直接用来与增加或减少线程前的下载速度进行比较可能会出现误差,所以需要在增加或减少线程数量后,经过预设时间再对增加或减少线程数量后的下载速度与增加或减少线程前的下载速度进行比较。

在本实施例中,增加或减少线程数量后,经过预设时间开始比较增加或减少线程数量后的下载速度与增加或减少线程数量前的下载速度,能够避免下载速度尚未达到稳定状态时,便被用来与增加或减少线程数量前的下载速度进行比较,能够使每一次对线程的调整更为准确。

在一个实施例中,每次增加线程后,若增加线程后的下载速度大于增加线程前的下载速度,则继续增加线程,否则减少线程,包括:每次增加线程后,若增加线程后的下载速度大于增加线程前的下载速度,且增加线程后的下载速度未超过预设下载速度阈值,则继续增加线程,否则减少线程;每次减少线程后,若减少线程后的下载速度大于减少线程前的下载速度,则继续减少线程,否则增加线程,包括:每次减少线程后,若减少线程后的下载速度大于减少线程前的下载速度,且减少线程后的下载速度未超过预设下载速度阈值,则继续减少线程,否则增加线程。

在本实施例中,增加或减少线程后,下载速度可能会增加,并增加带宽的占用,而系统中正在运行任务里面,需要占用一定带宽的并不一定只有下载任务,如果下载任务将带宽全部占用,将会对其他任务的正常工作造成极大影响,所以为了保证其他任务的正常工作,又能使下载任务占用尽量多的带宽,达到尽量快的下载速度,可以为下载任务设置下载速度阈值,每次增加或减少线程数量后,检测下载速度是否为超过预设速度阈值,如果超过了预设速度阈值,则会相应地减少或增加线程数量,使下载速度保持最大且不超过预设速度阈值。

在本实施例中,通过设置下载速度阈值,使得下载线程的数量不会将所有带宽全部占满,保证其他需要占用带宽的任务能够正常工作。当然,各种任务的正常工作并不只需要带宽,还需要各种cpu资源和内存资源等系统资源。在本实施例中,还可以设置cpu占用阈值和内存占用阈值等,当并发线程超过一定数量,占用的cpu资源和内存资源超过预设阈值时,调节并发线程数量,减少下载任务占用的系统资源,使得其他任务能够有充足的系统资源来保证其正常工作。

在一个实施例中,方法还包括:当所有线程的下载任务是否都已完成时,将所有文件片段组合成目标文件。

在本实施例中,每个线程只会下载目标文件的一部分,当所有线程的下载任务都已完成时,则表明该目标文件的所有片段都被下载到了本地,要想得到完整的文件,还需要将所有文件片段组合起来。

在一个实施例中,如图3所示,提供了一种多线程下载过程中线程数量调控的方法,包括以下步骤:

步骤301,增加线程。

步骤302,经过预设时间后判断增加线程后的下载速度是否大于增加线程前的下载速度,若是,则进入步骤303,若否,则进入步骤304。

步骤303,判断增加线程后的下载速度是否未超过预设下载速度阈值,若是,则返回步骤301,若否,则进入步骤304。

步骤304,减少线程。

步骤305,经过预设时间后判断减少线程后的下载速度是否大于减少线程前的下载速度,若是,则进入步骤306,若否,则返回步骤301。

步骤306,判断减少线程后的下载速度是否未超过预设下载速度阈值,若是,则返回步骤304,若否,则返回步骤301。

在本实施例中,是先判断增减线程后的下载速度是否大于增减线程前的下载速度,还是先判断增减线程后的下载速度是否未超过预设下载速度阈值,对整个线程控制的过程是没有影响的。每次增加或减少线程后,下载速度可能会发生变化,而下载速度的变化是需要经过一定时间后才能达到稳定的,如果每次增加或减少线程数量后立即检测其下载速度,得到的下载速度可能并不是真实的增加或减少线程后的下载速度,可信度很低,直接用来比较会出现很大误差,所以需要在增加或减少线程后,经过预设时间再开始比较速度变化。而且在下载过程中的下载速度过快,占用带宽过多,极有可能会使其他的一些任务无法正常工作,所以需要设置一个下载速度阈值,使下载速度保持最大且不超过下载速度阈值的状态,充分利用带宽且不会影响其他任务的正常工作。

在完成一遍线程调控过程后,可以循环执行这个过程,使线程数量能够随着环境变化一直保持下载速度最接近下载速度阈值。但是环境变化是需要一定时间的,在完成一遍线程调控后,得到的线程数量在一定时间内能够保证充分利用带宽且尽量减少系统资源的消耗。所以,在完成一遍线程调控后,可以经过预设时间后再开始循环执行线程调控的过程,保证在完成一遍线程调控后,得到的线程数量在一段时间内保证带宽的充分利用并尽量减少系统资源的开销,能避免因循环执行线程调控过程导致线程数量不能一直保持下载速度最大。

在本实施例中,每次可以增减多个线程,也可以只增减一个线程,由于增减多个线程可以使线程调控的过程更快,而增减一个线程可以使线程调控的过程更加精准,所以可以在第一遍调整线程数量时,先增减多个线程,在后续循环过程中再只增减一个线程,能够使线程调控的过程又快又精准。

在本实施例中,通过根据下载速度的变化调节线程数量,使下载速度保持最接近预设下载阈值的状态,能够充分利用系统分配的带宽,并尽量减少系统资源消耗。

如图4所示,在一个实施例中,提供了一种多线程下载装置,该装置具体包括:下载模块402,用于接收下载指令,根据下载指令开启预设并发线程数量的线程对目标文件进行下载。

线程控制模块404,用于在下载过程中,增加或减少线程,每次增加线程后,若增加线程后的下载速度大于增加线程前的下载速度,则继续增加线程,否则减少线程;每次减少线程后,若减少线程后的下载速度大于减少前的下载速度,则继续减少线程,否则增加线程。

在一个实施例中,多线程下载装置还包括:

线程设置模块401,用于在接收下载指令,根据下载指令开启预设数量的线程对目标文件进行下载之前,获取网络类型,根据网络类型设置对应的预设并发线程数量。

在一个实施例中,线程控制模块404,用于在下载过程中,增加或减少线程,每次增加线程后,经过预设时间开始比较增加线程后的下载速度与增加线程前的下载速度,若增加线程后的下载速度大于增加线程前的下载速度,则继续增加线程,否则减少线程;每次减少线程后,经过预设时间开始比较减少线程后的下载速度与减少线程前的下载速度,若减少线程后的下载速度大于减少线程前的下载速度,则继续减少线程,否则增加线程。

在一个实施例中,线程控制模块404,还用于在下载过程中,增加或减少线程,每次增加线程后,若增加线程后的下载速度大于增加线程前的下载速度,且增加线程后的下载速度未超过预设下载速度阈值,则继续增加线程,否则减少线程;每次减少线程后,若减少线程后的下载速度大于减少线程前的下载速度,且减少线程后的下载速度未超过预设下载速度阈值,则继续减少线程,否则增加线程。

在一个实施例中,多线程下载装置还包括:

文件组合模块406,用于当所有线程的下载任务都已完成时,将所有文件片段组合成目标文件。

在一个实施例中,如图5所示,提供了一种多线程下载装置,该装置具体包括以下模块:

线程设置模块401,用于在接收下载指令,根据下载指令开启预设数列的线程对目标文件进行下载之前,获取网络类型,根据网络类型设置对应的预设并发线程数量。

下载模块402,用于接收下载指令,根据下载指令开启预设并发线程数量的线程对目标文件进行下载。

线程控制模块404,用于在下载过程中,增加或减少线程,每次增加线程后,经过预设时间开始比较增加线程后的下载速度与增加线程前的下载速度,如欧增加线程后的下载速度大于增加线程前的下载速度,且未超过预设下载速度阈值,则继续早呢更加线程,否则减少线程;每次减少线程后,经过预设时间开始比较减少线程后的下载速度与减少线程前的下载速度,若减少线程后的下载速度大于减少线程前的下载速度,且未超过预设下载速度阈值,则继续减少线程,否则增加线程。

文件组合模块406,用于当所有线程的下载任务都已完成时,将所有文件片段组合成目标文件。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1