CN113031988B - 应用程序更新方法、装置、设备和存储介质 - Google Patents

应用程序更新方法、装置、设备和存储介质 Download PDF

Info

Publication number
CN113031988B
CN113031988B CN202110326671.7A CN202110326671A CN113031988B CN 113031988 B CN113031988 B CN 113031988B CN 202110326671 A CN202110326671 A CN 202110326671A CN 113031988 B CN113031988 B CN 113031988B
Authority
CN
China
Prior art keywords
data
installation package
update
processing
file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110326671.7A
Other languages
English (en)
Other versions
CN113031988A (zh
Inventor
张树悦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing ByteDance Network Technology Co Ltd
Original Assignee
Beijing ByteDance Network Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing ByteDance Network Technology Co Ltd filed Critical Beijing ByteDance Network Technology Co Ltd
Priority to CN202110326671.7A priority Critical patent/CN113031988B/zh
Publication of CN113031988A publication Critical patent/CN113031988A/zh
Application granted granted Critical
Publication of CN113031988B publication Critical patent/CN113031988B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

本公开实施例涉及一种应用程序更新方法、装置、设备和存储介质,该方法包括:获取待更新应用程序对应的当前版本安装包和更新补丁;对当前版本安装包中的多个压缩数据段进行并行解压缩处理,生成相应解压数据段;利用预设的数据合成算法,将多个解压数据段、当前版本安装包中的至少一个未压缩数据段和更新补丁合成为中间数据流;基于更新补丁中的压缩参数,确定中间数据流中各数据段的处理方式;按照各处理方式处理相应数据段,生成更新安装包;基于更新安装包更新应用程序。实现了安装包增量更新过程中的多个数据段异步并发的解压缩处理,提高了设备资源利用率,缩短了更新耗时,提升了应用程序增量更新的速度和成功率。

Description

应用程序更新方法、装置、设备和存储介质
技术领域
本公开涉及信息处理技术领域,尤其涉及一种应用程序更新方法、装置、设备和存储介质。
背景技术
为了满足用户的多元化应用需求,现有的应用程序的功能很多,导致了应用程序的安装包过大。在应用程序更新时,直接下载整个安装包的更新方式不仅会消耗更多的流量,而且使得安装过程耗时较多。为解决该问题,增量更新方式日渐成为应用程序升级的主流方式。
参见图1,增量更新的大致原理为:服务端中,对当前版本安装包(即旧版本安装包)和更新安装包(即新版本安装包)进行解析,并利用补丁生成器来生成更新补丁,该更新补丁中包含更新安装包相对于当前版本安装包变更的差异部分。客户端更新时,只需从服务端下载该更新补丁,然后通过补丁合成器对当前版本安装包和更新补丁进行本地合成,生成与服务端中相同的更新安装包,并利用该更新安装包进行应用程序更新。
其中,客户端利用开源库ArchivePatcher在本地合成更新安装包的过程可参见图2。首先,按照从头到尾的线性顺序对当前版本安装包中包含的多个数据段进行相应处理。例如,不需要解压缩的数据段(即未压缩数据段),直接复制至一个临时文件;需要解压缩的数据段(即压缩数据段)则利用解压器进行解压,再输出至一个临时文件。最终,该当前版本安装包输出为体积增大很多的一个临时中间文件。其次,利用差分算法bsdiff对临时中间文件和更新补丁patch文件进行合成处理,输出一个文件数据流。最后,按照更新补丁patch文件中记录的更新安装包的文件结构和压缩参数,以线性顺序,对bsdiff输出的文件数据流中的数据段进行复制或压缩处理,输出更新安装包。
上述基于开源库ArchivePatcher实现增量更新的方案,无法充分利用客户端设备的有效资源,使得客户端设备在应用程序更新期间的性能下降,进而造成应用程序更新速度慢、耗时长的问题,尤其是在应用程序安装包过大、设备性能较差的情况下,设备性能下降和更新耗时长的问题更为突出,甚至导致更新成功率过低。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种应用程序更新方法、装置、设备和存储介质。
本公开实施例提供了一种应用程序更新方法,所述方法包括:
获取待更新应用程序对应的当前版本安装包和更新补丁;
对所述当前版本安装包中的多个压缩数据段进行并行解压缩处理,生成相应解压数据段;
利用预设的数据合成算法,将多个所述解压数据段、所述当前版本安装包中的至少一个未压缩数据段和所述更新补丁合成为中间数据流;
基于所述更新补丁中的压缩参数,确定所述中间数据流中各数据段的处理方式;其中,所述处理方式包括复制处理和压缩处理;
按照各所述处理方式处理相应数据段,生成更新安装包;
基于所述更新安装包更新所述应用程序。
本公开实施例还提供了一种应用程序更新装置,所述装置包括:
更新补丁获取模块,用于获取待更新应用程序对应的当前版本安装包和更新补丁;
解压数据段生成模块,用于对所述当前版本安装包中的多个压缩数据段进行并行解压缩处理,生成相应解压数据段;
中间数据流合成模块,用于利用预设的数据合成算法,将多个所述解压数据段、所述当前版本安装包中的至少一个未压缩数据段和所述更新补丁合成为中间数据流;
数据段处理方式确定模块,用于基于所述更新补丁中的压缩参数,确定所述中间数据流中各数据段的处理方式;其中,所述处理方式包括复制处理和压缩处理;
更新安装包生成模块,用于按照各所述处理方式处理相应数据段,生成更新安装包;
应用程序更新模块,用于基于所述更新安装包更新所述应用程序。
本公开实施例还提供了一种电子设备,所述电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现如本公开任意实施例提供的应用程序更新方法。
本公开实施例还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行如本公开任意实施例提供的应用程序更新方法。
本公开实施例提供的应用程序更新方案,通过获取待更新应用程序对应的当前版本安装包和更新补丁;对当前版本安装包中的多个压缩数据段进行并行解压缩处理,生成相应解压数据段;利用预设的数据合成算法,将多个解压数据段、当前版本安装包中的至少一个未压缩数据段和更新补丁合成为中间数据流;基于更新补丁中的压缩参数,确定中间数据流中各数据段的处理方式;其中,处理方式包括复制处理和压缩处理;按照各处理方式处理相应数据段,生成更新安装包;基于更新安装包更新应用程序。实现了在安装包增量更新过程中充分利用设备的多核性能,对当前版本安装包中的多个数据段进行异步并发的解压缩处理,摒弃了解压缩过程的线性阻塞处理方式,节省了应用程序增量更新在解压缩环节的耗时,同时省去了未压缩数据段的复制过程,节省了存储空间和复制耗时,从而提升了应用程序增量更新的速度和成功率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中应用程序增量更新的原理示意图;
图2为现有技术中客户端基于Bsdiff开源库进行更新安装包合成的过程示意图;
图3为本公开实施例提供的一种应用程序更新方法的流程示意图;
图4为本公开实施例提供的对当前版本安装包进行并行解压缩的过程示意图;
图5为本公开实施例提供的另一种应用程序更新方法的流程示意图;
图6为本公开实施例提供的基于HDiffPatch开源库进行更新安装包合成的过程示意图;
图7为本公开实施例提供的一种应用程序更新装置的结构示意图;
图8为本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步的详细描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
本公开实施例提供的应用程序更新方法,主要适用于采用增量更新方式进行应用程序更新的场景。本公开实施例提供的应用程序更新方法可以由应用程序更新装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在电子设备中,例如手机、掌上电脑、平板电脑、笔记本电脑或台式电脑等。
图3是本公开实施例提供的一种应用程序更新方法的流程图。参见图3,该方法具体包括:
S110、获取待更新应用程序对应的当前版本安装包和更新补丁。
其中,更新补丁是当前版本安装包和更新安装包之间的差分文件,其记录了更新前后的两个安装包中内容有差异的数据段、增减或减少的数据段、数据段排列顺序、数据段压缩参数等各种差异信息。更新补丁可以在服务端生成,也可以是由安装包发布者生成后发布。
客户端从本地存储空间中获取当前版本安装包。更新补丁可以是客户端通过网络从服务端中拉取而获得,也可以是通过有线或无线的方式从其他外部存储器中拷贝得到。
S120、对当前版本安装包中的多个压缩数据段进行并行解压缩处理,生成相应解压数据段。
相关技术中对当前版本安装包中的多个压缩数据段的解压缩处理是按序线性阻塞方式处理的,这种处理方式很容易造成客户端设备中某个线程持续处于排队阻塞状态,而其他处理器资源处于空闲状态,不仅延长了增量更新的耗时,而且造成设备资源的浪费,从而降低设备性能和增量更新的速度,甚至因长时间更新不完而导致更新失败。基于此,本公开实施例中采用多线程并发执行的方式来处理当前版本安装包中多个压缩数据段的解压缩过程。
具体地,启用多个线程,每个线程运行一个解压器,对一个压缩数据段进行解压缩处理,输出解压数据段至一个临时子文件。开启的线程数量可以与压缩数据段的数量相等;线程数量也可以少于压缩数据段的数量,此时需要按需对线程进行复用。
在一些实施例中,S120包括:基于多个压缩数据段生成相应解压任务;利用线程池中的多个线程并行处理各解压任务,生成相应解压数据段;其中,单一线程在同一时刻处理一个解压任务。本实施例中,为了高效管理线程,提高并发执行效率,以及提高设备的资源利用率,启用线程池来实现多线程并发处理。具体地,将每个压缩数据段生成对应的解压任务。然后,将这些解压任务投入线程池。线程池中异步创建新线程或者复用已有线程来处理这些解压任务。每个线程每次处理一个解压任务,运行解压器后,输出数据便为该解压任务的解压数据段。
在一些实施例中,线程池通过如下方式构建多个线程:若线程池中存在空闲的已有线程,且空闲的已有线程的数量不少于待处理任务的任务数量,则复用相应任务数量的已有线程,构建多个线程;其中,待处理任务为解压任务或压缩任务;若线程池中存在空闲的已有线程,且空闲的已有线程的数量少于任务数量,则基于任务数量和空闲的已有线程的数量,确定缺少线程数量,并基于缺少线程数量创建新线程,以由空闲的已有线程和新线程构建多个线程;若线程池中不存在空闲的已有线程,则基于任务数量创建新线程,构建多个线程。具体地,线程池具有自动管理线程功能,其在已有线程处于空闲状态时复用该线程,在已有线程不满足任务要求时自动创建新的线程。针对各解压任务,如果空闲的已有线程的数量满足解压任务的任务数量,那么复用任务数量的空闲的已有线程。如果空闲的已有线程的数量少于任务数量(可得数量差,即缺少线程数量),那么除了复用所有空闲的已有线程外,还需创建缺少线程数量的新线程。如果没有空闲的已有线程,那么创建任务数量的新线程。
上述对当前版本安装包中的多个压缩数据段进行并行解压缩处理的过程可参见图4:当前版本安装包中的多个压缩数据段并行解压缩,分别输出解压数据段。未压缩数据段独立复制处理。
S130、利用预设的数据合成算法,将多个解压数据段、当前版本安装包中的至少一个未压缩数据段和更新补丁合成为中间数据流。
其中,数据合成算法是预先设置的、对当前版本安装包中的数据和更新补丁中的数据进行合成的算法,其可以是各种差分开源库中的差分算法,例如可以是ArchivePatcher开源库的底层差分算法bsdiff。在一些实施例中,数据合成算法为HDiffPatch。这是因为HDiffPatch算法在合成速度和内存占用率等方面均优于bsdiff算法,从而可以进一步提高增量更新流程中安装包合成环节的效率。中间数据流是指数据合成算法输出的数据流,其可以仅以数据流的形式存在于内存中,也可以存储于本地存储空间。
如果将多个解压数据段和至少一个未压缩数据段合并为一个临时中间文件,那么需要复制并存储一次未压缩数据段。该复制和存储的过程只是为了形成一个文件流作为已有数据合成算法的输入,但是其会存在一定的I/O(输入/输出)耗时,且会占用部分存储空间。本公开实施例中,省略该次未压缩数据段的复制和存储以及临时中间文件的合成过程,直接将多个解压数据段和至少一个未压缩数据段作为数据合成算法的输入,以减少该环节的I/O耗时和存储空间占用,从而进一步减少更新安装包的合成耗时。数据合成算法则可通过改进数据接入接口和内部对输入数据的处理流程,实现对多个输入文件的兼容处理,最终输出一个中间数据流。
S140、基于更新补丁中的压缩参数,确定中间数据流中各数据段的处理方式。
其中,处理方式包括复制处理和压缩处理。
根据更新补丁中设定的各数据段的压缩参数,确定出中间数据流中各数据段的处理方式。例如,若某一数据段的压缩参数为空,说明该数据段不需要压缩处理,则该数据段的处理方式为复制处理。若某一数据段的压缩参数不为空,则确定该数据段的处理方式为压缩处理。
S150、按照各处理方式处理相应数据段,生成更新安装包。
对中间数据流中的每个数据段采用相应的处理方式进行处理,并最终输出更新安装包。
S160、基于更新安装包更新应用程序。
按照应用程序升级安装流程,安装该更新安装包,完成应用程序更新。
本公开实施例提供的应用程序更新方案,通过获取待更新应用程序对应的当前版本安装包和更新补丁;对当前版本安装包中的多个压缩数据段进行并行解压缩处理,生成相应解压数据段;利用预设的数据合成算法,将多个解压数据段、当前版本安装包中的至少一个未压缩数据段和更新补丁合成为中间数据流;基于更新补丁中的压缩参数,确定中间数据流中各数据段的处理方式;其中,处理方式包括复制处理和压缩处理;按照各处理方式处理相应数据段,生成更新安装包;基于更新安装包更新应用程序。实现了在安装包增量更新过程中充分利用设备的多核性能,对当前版本安装包中的多个数据段进行异步并发的解压缩处理,摒弃了解压缩过程的线性阻塞处理方式,节省了应用程序增量更新在解压缩环节的耗时,同时省去了未压缩数据段的复制过程,节省了存储空间和复制耗时,从而提升了应用程序增量更新的速度和成功率。
图5是本公开实施例提供的又一种应用程序更新方法的流程图。其对“数据合成算法”的内部实现进行了进一步优化。在此基础上,还可以进一步对“按照各处理方式处理相应数据段,生成更新安装包”进行优化。其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图5,该应用程序更新方法包括:
S210、获取待更新应用程序对应的当前版本安装包和更新补丁。
S220、对当前版本安装包中的多个压缩数据段进行并行解压缩处理,生成相应解压数据段。
S230、利用预设的数据合成算法,将多个解压数据段、当前版本安装包中的至少一个未压缩数据段和更新补丁合成为中间数据流。
在一些实施例中,数据合成算法通过如下方式实现将多个解压数据段、当前版本安装包中的至少一个未压缩数据段和更新补丁合成为中间数据流的功能:将各解压数据段和各未压缩数据段作为一个虚拟文件流进行数据读取,并基于读取的数据和更新补丁,合成中间数据流。本实施例中,数据合成算法进行了调用接口和内部数据读取两个部分的改进。对于调用接口,其输入参数由单文件数据流更改为子文件集合,该接口的全部输入参数为子文件集合、更新补丁的文件数据流和输出数据流。对于内部数据读取,其将子文件集合视为一个虚拟文件流进行数据的按需分段读取。读取的数据量和读取后的数据合成过程则保持不变。这里的子文件集合为各解压数据段和各未压缩数据段构成的集合。
在一些实施例中,将各解压数据段和各未压缩数据段作为一个虚拟文件流进行数据读取,并基于读取的数据和更新补丁,合成中间数据流包括:按照当前版本安装包中的数据顺序,排列各解压数据段和各未压缩数据段分别对应的文件路径信息,生成文件路径集合;基于更新补丁和文件路径集合,分段读取相应文件路径中的数据,合成中间数据流。本实施例中,数据合成算法内部进行数据读取的过程可实现为:先按照当前版本安装包中的数据顺序,将多个子文件集合中每个子文件(压缩数据段或未压缩数据段)的文件路径信息排列为一个文件路径集合。然后,根据更新补丁的比对进度和原本的数据合成算法中每次读取的数据量,每次从文件路径集合中定位需要读取的数据的路径,并按序读取所需数据量的数据,停止读取时则记录当前读取位置,以便下次读取时可以继续从当前读取位置继续读取数据。按照该过程,按需分段读取整个子文件集合中的数据,并进行比对和合成处理,输出中间数据流。这样能够确保当前版本安装包中的数据如同一个文件数据流一样被读取,既能兼顾数据合成算法的后续数据处理过程,又能节省数据合成前的未压缩数据段的复制和存储过程,从而进一步提高安装包合成效率。
在一些实施例中,中间数据流存储于本地存储空间。数据合成算法输出的中间数据流是否存储于本地存储空间取决于后续的压缩处理过程。如果后续采用线性执行的压缩过程,那么该中间数据流以数据流的形式存在于内存中即可,无需再独立复制并存储未压缩数据段。如果后续采用并行执行的压缩过程,那么该中间数据流需要存储于本地存储空间,此时需要从当前版本安装包中复制一次未压缩数据段并存储。
S240、基于更新补丁中的压缩参数,确定中间数据流中各数据段的处理方式。
S250、若处理方式为复制处理,则复制中间数据流中需复制的数据段,生成相应第一临时子文件。
由数据合成算法输出的中间数据流生成更新安装包的过程,需要按照更新补丁中设定的文件结构和压缩参数对各数据段进一步处理。具体地,如果确定的某些数据段的处理方式为复制处理,那么将需复制的数据段复制到第一临时子文件中。如果需复制的数据段有多个,其可以线性阻塞方式进行复制,也可以采用并行复制方式,最终也会获得与需复制的数据段的数量一致的第一临时子文件。
S260、若处理方式为压缩处理,则对中间数据流中需压缩的数据段进行并行压缩处理,生成各第二临时子文件。
中间数据流中存在需要压缩处理的多个数据段。相关技术中该压缩过程也是以线性阻塞方式执行,其同样会造成耗时长、设备资源利用率低的问题。本公开实施例中,在并行解压缩处理的基础上,进一步进行并行压缩处理。具体地,如果确定的某些数据段的处理方式为压缩处理,那么利用多个线程来分别运行压缩器,每个线程中运行的压缩器可对一个需压缩的数据段进行压缩处理,压缩器将生成的压缩数据段输出为第二临时子文件。同样地,线程可复用,则并行的线程数量少于或等于需压缩的数据段的数量。最终输出的第二临时子文件的数量与需压缩的数据段的数量一致。
在一些实施例中,对中间数据流中需压缩的数据段进行并行压缩处理,生成各第二临时子文件包括:基于更新补丁中的压缩参数和各需压缩的数据段生成相应压缩任务;利用线程池中的多个线程并行处理各压缩任务,生成各第二临时子文件;其中,单一线程在同一时刻处理一个压缩任务。本实施例中同样启用线程池进行异步并行压缩。先根据更新补丁中的压缩参数和相应的需压缩的数据段来生成压缩任务。然后,将这些压缩任务投入线程池。线程池中创建新线程或者复用已有线程来处理这些压缩任务,线程池的线程管理可参见S120中的说明。每个线程每次处理一个压缩任务,通过运行压缩器,将需压缩的数据段按照压缩参数压缩,并输出压缩数据段至第二临时子文件。
S270、基于文件结构,组织各第一临时子文件和各第二临时子文件,生成更新安装包。
按照更新补丁中设定的文件结构中各数据段的顺序,按序排列各第一临时子文件和各第二临时子文件,并输出至一个文件,得到增量更新的结果,即更新安装包。
S280、基于更新安装包更新应用程序。
本公开实施例的上述技术方案,通过将各解压数据段和各未压缩数据段作为一个虚拟文件流进行数据读取,并基于读取的数据和更新补丁,合成中间数据流。实现了当前版本安装包中的数据如同一个文件数据流一样被读取,既能兼顾数据合成算法的后续数据处理过程,又能节省数据合成前的未压缩数据段的复制和存储过程,从而减少耗时、节约存储空间,进一步提高增量更新效率。通过若处理方式为复制处理,则复制中间数据流中需复制的数据段,生成相应第一临时子文件;若处理方式为压缩处理,则对中间数据流中需压缩的数据段进行并行压缩处理,生成各第二临时子文件;基于文件结构,按序组织各第一临时子文件和各第二临时子文件,生成更新安装包。实现了以多线性异步并发方式执行中间数据流中各数据段的复制和压缩过程,进一步提高了设备资源的利用率,且进一步减少了更新耗时,从而进一步提升应用程序增量更新的速度和成功率。
参见图6,基于上述各技术方案,在客户端中基于HDiffPatch开源库中的合成算法对当前版本安装包和更新补丁进行合成,生成更新安装包的完整过程为:启用线程池来对当前版本安装包中的多个压缩数据段进行解压缩处理,获得多个压缩数据段。然后,将多个压缩数据段和多个未压缩数据段直接输入HDiffPatch数据合成算法,作为其输入参数中的子文件集合。该数据合成算法对子文件集合和更新补丁文件进行合成处理,输出一个中间数据流。该中间数据流存储于本地存储空间。之后,启用线程池,异步并发地执行对中间数据流中的各数据段的复制和压缩处理,生成复制所得的第一临时子文件和压缩所得的第二临时子文件。最后,按照更新补丁中的文件结构,组合这些第一临时子文件和第二临时子文件,生成更新安装包。
相关技术中,解压缩和压缩均是线性阻塞方式执行,其耗时在整个增量更新的占比高达80%以上,造成增量更新速度很慢、效果差。而本公开实施例提供的技术方案,如果仅采用多线程并发式地解压缩和压缩,其整体上能够降低约48%的更新耗时。如果对同一应用程序的多个访问量PV和独立访客UV的平均耗时和合成成功率进行统计,采用图6所示方案,即同时采用多线程并发式地解压缩和压缩、直接将当前版本安装包中的未压缩数据段输入数据合成算法、以及数据合成算法采用更优的HDiffPatch的优化方式,可降低平均耗时PV约46.83%,提高合成成功率PV约5.54%,提高合成成功率UV约0.58%。所以,采用本公开实施例提供的应用程序更新方案,不仅可以节省流量,而且能够明显提高增量更新速度和成功率,一定程度上优化了用户体验。
图7为本公开实施例提供的一种应用程序更新装置的结构示意图,该装置可由软件和/或硬件实现,一般可集成在电子设备中,可通过执行应用程序更新方法来合成更新安装包,进而更新客户端中应用程序。如图7所示,该装置包括:
更新补丁获取模块710,用于获取待更新应用程序对应的当前版本安装包和更新补丁;
解压数据段生成模块720,用于对当前版本安装包中的多个压缩数据段进行并行解压缩处理,生成相应解压数据段;
中间数据流合成模块730,用于利用预设的数据合成算法,将多个解压数据段、当前版本安装包中的至少一个未压缩数据段和更新补丁合成为中间数据流;
数据段处理方式确定模块740,用于基于更新补丁中的压缩参数,确定中间数据流中各数据段的处理方式;其中,处理方式包括复制处理和压缩处理;
更新安装包生成模块750,用于按照各处理方式处理相应数据段,生成更新安装包;
应用程序更新模块760,用于基于更新安装包更新应用程序。
在一些实施例中,解压数据段生成模块720具体用于:
基于多个压缩数据段生成相应解压任务;
利用线程池中的多个线程并行处理各解压任务,生成相应解压数据段;其中,线程在同一时刻处理一个解压任务。
在一些实施例中,该装置还包括数据合成算法执行模块,用于通过如下方式实现将多个解压数据段、当前版本安装包中的至少一个未压缩数据段和更新补丁合成为中间数据流的功能:
将各解压数据段和各未压缩数据段作为一个虚拟文件流进行数据读取,并基于读取的数据和更新补丁,合成中间数据流。
在一些实施例中,数据合成算法执行模块具体用于:
按照当前版本安装包中的数据顺序,排列各解压数据段和各未压缩数据段分别对应的文件路径信息,生成文件路径集合;
基于更新补丁和文件路径集合,分段读取相应文件路径中的数据,合成中间数据流。
在一些实施例中,数据合成算法为HDiffPatch。
在一些实施例中,中间数据流存储于本地存储空间;
相应地,更新安装包生成模块750包括:
第一临时子文件生成子模块,用于若处理方式为复制处理,则复制中间数据流中需复制的数据段,生成相应第一临时子文件;
第二临时子文件生成子模块,用于若处理方式为压缩处理,则对中间数据流中需压缩的数据段进行并行压缩处理,生成各第二临时子文件;
更新安装包生成子模块,用于基于文件结构,按序组织各第一临时子文件和各第二临时子文件,生成更新安装包。
在一些实施例中,第二临时子文件生成子模块具体用于:
基于更新补丁中的压缩参数和各需压缩的数据段生成相应压缩任务;
利用线程池中的多个线程并行处理各压缩任务,生成各第二临时子文件;其中,单一线程在同一时刻处理一个压缩任务。
在一些实施例中,线程池通过如下方式构建多个线程:
若线程池中存在空闲的已有线程,且空闲的已有线程的数量不少于待处理任务的任务数量,则复用相应任务数量的已有线程,构建多个线程;其中,待处理任务为解压任务或压缩任务;
若线程池中存在空闲的已有线程,且空闲的已有线程的数量少于任务数量,则基于任务数量和空闲的已有线程的数量,确定缺少线程数量,并基于缺少线程数量创建新线程,以由空闲的已有线程和新线程构建多个线程;
若线程池中不存在空闲的已有线程,则基于任务数量创建新线程,构建多个线程。
通过本公开实施例提供的一种应用程序更新装置,实现了在安装包增量更新过程中充分利用设备的多核性能,对当前版本安装包中的多个数据段进行异步并发的解压缩处理,摒弃了解压缩过程的线性阻塞处理方式,节省了应用程序增量更新在解压缩环节的耗时,同时省去了未压缩数据段的复制过程,节省了存储空间和复制耗时,从而提升了应用程序增量更新的速度和成功率。
本公开实施例所提供的应用程序更新装置可执行本公开任意实施例所提供的应用程序更新方法,具备执行方法相应的功能模块和有益效果。
值得注意的是,上述应用程序更新装置的实施例中,所包括的各个模块、子模块和单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能模块、子模块、单元的具体名称也只是为了便于相互区分,并不用于限制本公开的保护范围。
图8为本公开实施例提供的一种电子设备的结构示意图。如图8所示,电子设备800包括一个或多个处理器801和存储器802。
处理器801可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备800中的其他组件以执行期望的功能。
存储器802可以包括一个或多个计算机程序产品,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器801可以运行所述程序指令,以实现上文所说明的本公开实施例的应用程序更新方法以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储诸如当前版本安装包、各种中间/临时文件、更新安装包等各种内容。
在一个示例中,电子设备800还可以包括:输入装置803和输出装置804,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。该输入装置803可以包括例如键盘、鼠标等等。该输出装置804可以向外部输出各种信息,包括应用程序更新过程中的各种提示信息等。该输出装置804可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图8中仅示出了该电子设备800中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备800还可以包括任何其他适当的组件。
除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例所提供的应用程序更新方法。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例所提供的应用程序更新方法。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
需要说明的是,本公开所用术语仅为了描述特定实施例,而非限制本申请范围。如本公开说明书和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。术语“和/或”包括一个或多个相关所列条目的任何一个和所有组合。诸如“第一”、“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (9)

1.一种应用程序更新方法,其特征在于,包括:
获取待更新应用程序对应的当前版本安装包和更新补丁;
对所述当前版本安装包中的多个压缩数据段进行并行解压缩处理,生成相应解压数据段;
利用预设的数据合成算法,将多个所述解压数据段、所述当前版本安装包中的至少一个未压缩数据段和所述更新补丁合成为中间数据流;其中,所述数据合成算法的调用接口的输入参数包括子文件集合和所述更新补丁的文件数据流,且所述数据合成算法将所述子文件集合作为虚拟文件流进行数据读取;所述子文件集合为各所述解压数据段和所述未压缩数据段构成的集合;
基于所述更新补丁中的压缩参数,确定所述中间数据流中各数据段的处理方式;其中,所述处理方式包括复制处理和压缩处理;
按照各所述处理方式处理相应数据段,生成更新安装包;
基于所述更新安装包更新所述应用程序。
2.根据权利要求1所述的方法,其特征在于,所述对所述当前版本安装包中的多个压缩数据段进行并行解压缩处理,生成相应解压数据段包括:
基于所述多个压缩数据段生成相应解压任务;
利用线程池中的多个线程并行处理各所述解压任务,生成相应解压数据段;其中,所述线程在同一时刻处理一个所述解压任务。
3.根据权利要求1所述的方法,其特征在于,所述数据合成算法通过如下方式实现将多个所述解压数据段、所述当前版本安装包中的至少一个未压缩数据段和所述更新补丁合成为中间数据流:
按照所述当前版本安装包中的数据顺序,排列各所述解压数据段和各所述未压缩数据段分别对应的文件路径信息,生成文件路径集合;
基于所述更新补丁和所述文件路径集合,分段读取相应文件路径中的数据,合成所述中间数据流。
4.根据权利要求1所述的方法,其特征在于,所述中间数据流存储于本地存储空间;
所述按照各所述处理方式处理相应数据段,生成所述更新安装包包括:
若所述处理方式为所述复制处理,则复制所述中间数据流中需复制的数据段,生成相应第一临时子文件;
若所述处理方式为所述压缩处理,则对所述中间数据流中需压缩的数据段进行并行压缩处理,生成各第二临时子文件;
基于所述更新补丁中的文件结构,组织各所述第一临时子文件和各所述第二临时子文件,生成所述更新安装包。
5.根据权利要求4所述的方法,其特征在于,所述对所述中间数据流中需压缩的数据段进行并行压缩处理,生成各第二临时子文件包括:
基于所述压缩参数和各所述需压缩的数据段生成相应压缩任务;
利用线程池中的多个线程并行处理各所述压缩任务,生成各所述第二临时子文件;其中,单一所述线程在同一时刻处理一个所述压缩任务。
6.根据权利要求2或5所述的方法,其特征在于,所述线程池通过如下方式构建所述多个线程:
若所述线程池中存在空闲的已有线程,且所述空闲的已有线程的数量不少于待处理任务的任务数量,则复用相应任务数量的所述已有线程,构建所述多个线程;其中,所述待处理任务为所述解压任务或所述压缩任务;
若所述线程池中存在所述空闲的已有线程,且所述空闲的已有线程的数量少于所述任务数量,则基于所述任务数量和所述空闲的已有线程的数量,确定缺少线程数量,并基于所述缺少线程数量创建新线程,以由所述空闲的已有线程和所述新线程构建所述多个线程;
若所述线程池中不存在所述空闲的已有线程,则基于所述任务数量创建新线程,构建所述多个线程。
7.一种应用程序更新装置,其特征在于,包括:
更新补丁获取模块,用于获取待更新应用程序对应的当前版本安装包和更新补丁;
解压数据段生成模块,用于对所述当前版本安装包中的多个压缩数据段进行并行解压缩处理,生成相应解压数据段;
中间数据流合成模块,用于利用预设的数据合成算法,将多个所述解压数据段、所述当前版本安装包中的至少一个未压缩数据段和所述更新补丁合成为中间数据流;其中,所述数据合成算法的调用接口的输入参数包括子文件集合和所述更新补丁的文件数据流,且所述数据合成算法将所述子文件集合作为虚拟文件流进行数据读取;所述子文件集合为各所述解压数据段和所述未压缩数据段构成的集合;
数据段处理方式确定模块,用于基于所述更新补丁中的压缩参数,确定所述中间数据流中各数据段的处理方式;其中,所述处理方式包括复制处理和压缩处理;
更新安装包生成模块,用于按照各所述处理方式处理相应数据段,生成更新安装包;
应用程序更新模块,用于基于所述更新安装包更新所述应用程序。
8.一种电子设备,其特征在于,所述电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述权利要求1-6中任一所述的应用程序更新方法。
9.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序用于执行上述权利要求1-6中任一所述的应用程序更新方法。
CN202110326671.7A 2021-03-26 2021-03-26 应用程序更新方法、装置、设备和存储介质 Active CN113031988B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110326671.7A CN113031988B (zh) 2021-03-26 2021-03-26 应用程序更新方法、装置、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110326671.7A CN113031988B (zh) 2021-03-26 2021-03-26 应用程序更新方法、装置、设备和存储介质

Publications (2)

Publication Number Publication Date
CN113031988A CN113031988A (zh) 2021-06-25
CN113031988B true CN113031988B (zh) 2024-05-14

Family

ID=76474351

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110326671.7A Active CN113031988B (zh) 2021-03-26 2021-03-26 应用程序更新方法、装置、设备和存储介质

Country Status (1)

Country Link
CN (1) CN113031988B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6216175B1 (en) * 1998-06-08 2001-04-10 Microsoft Corporation Method for upgrading copies of an original file with same update data after normalizing differences between copies created during respective original installations
CN106775827A (zh) * 2016-11-25 2017-05-31 广东欧珀移动通信有限公司 一种应用程序更新方法及装置、计算机设备
CN107016053A (zh) * 2017-03-02 2017-08-04 中国科学院信息工程研究所 一种并行的数据差分方法
CN107168733A (zh) * 2017-04-25 2017-09-15 北京五八信息技术有限公司 差分文件包的生成及应用程序的更新方法、装置和系统
CN108804130A (zh) * 2017-05-03 2018-11-13 腾讯科技(深圳)有限公司 程序安装包生成方法及装置
JP2018195046A (ja) * 2017-05-17 2018-12-06 富士通株式会社 プログラム更新装置、プログラム更新方法、プログラム更新プログラム及びプログラム更新システム
CN109697071A (zh) * 2017-10-24 2019-04-30 腾讯科技(深圳)有限公司 安装包合成方法、装置、终端及存储介质
CN111580851A (zh) * 2020-06-24 2020-08-25 腾讯科技(深圳)有限公司 一种数据管理的方法以及相关装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6216175B1 (en) * 1998-06-08 2001-04-10 Microsoft Corporation Method for upgrading copies of an original file with same update data after normalizing differences between copies created during respective original installations
CN106775827A (zh) * 2016-11-25 2017-05-31 广东欧珀移动通信有限公司 一种应用程序更新方法及装置、计算机设备
CN107016053A (zh) * 2017-03-02 2017-08-04 中国科学院信息工程研究所 一种并行的数据差分方法
CN107168733A (zh) * 2017-04-25 2017-09-15 北京五八信息技术有限公司 差分文件包的生成及应用程序的更新方法、装置和系统
CN108804130A (zh) * 2017-05-03 2018-11-13 腾讯科技(深圳)有限公司 程序安装包生成方法及装置
JP2018195046A (ja) * 2017-05-17 2018-12-06 富士通株式会社 プログラム更新装置、プログラム更新方法、プログラム更新プログラム及びプログラム更新システム
CN109697071A (zh) * 2017-10-24 2019-04-30 腾讯科技(深圳)有限公司 安装包合成方法、装置、终端及存储介质
CN111580851A (zh) * 2020-06-24 2020-08-25 腾讯科技(深圳)有限公司 一种数据管理的方法以及相关装置

Also Published As

Publication number Publication date
CN113031988A (zh) 2021-06-25

Similar Documents

Publication Publication Date Title
US11061731B2 (en) Method, device and computer readable medium for scheduling dedicated processing resource
WO2021103479A1 (zh) 用于训练深度学习模型的方法和装置
US10007605B2 (en) Hardware-based array compression
JPH10228379A (ja) 低減されたラン−タイム・メモリ空間要求を有するアーキテクチャ特定コードを実行する方法及びコンピュータ・システム
Allusse et al. Gpucv: an opensource gpu-accelerated framework forimage processing and computer vision
US20200319867A1 (en) Systems and methods for eager software build
US8970613B2 (en) Render tree caching
US11068243B2 (en) Application stack builder based on node features
CN111625289B (zh) 应用程序快速启动方法、装置和电子设备
US20210295158A1 (en) End-to-end optimization
WO2018161791A1 (zh) 可执行文件的压缩方法及装置
CN112783558B (zh) 一种加快Linux内核启动的自解压阶段的方法
CN101135978B (zh) 压缩版应用程序生成、执行方法与装置及应用方法与系统
US20220172044A1 (en) Method, electronic device, and computer program product for deploying machine learning model
CN113031988B (zh) 应用程序更新方法、装置、设备和存储介质
CN107577474B (zh) 升级文件的处理方法及装置、电子设备
JP4768984B2 (ja) コンパイル方法、コンパイルプログラムおよびコンパイル装置
JP2008276547A (ja) プログラム処理方法及び情報処理装置
EP3475814A1 (en) Preemptive decompression scheduling for a nand storage device
CN112269602A (zh) 一种WebAssembly加载方法、装置及存储介质
CN114020333B (zh) Cuda多线程处理方法、系统及相关设备
CN115407936A (zh) 一种数据集处理方法、系统、终端及计算机可读存储介质
CN110633083A (zh) 代码文件处理方法、装置、电子设备及计算机可读介质
CN101256501A (zh) 软件解压缩启动方法
CN112882698A (zh) 开发环境的生成方法及装置、计算机存储介质及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant