基于飞腾处理器平台的多线程并发数据压缩方法

文档序号:6546594阅读:340来源:国知局
基于飞腾处理器平台的多线程并发数据压缩方法
【专利摘要】本发明公开了一种基于飞腾处理器平台的多线程并发数据压缩方法,其实施步骤如下:获取压缩参数,初始化压缩队列和写队列,开启写线程;根据压缩参数确定每一份分割压缩数据信息并存入压缩队列;根据确定的压缩线程的数量创建压缩线程,每一个压缩线程根据收到分割压缩数据信息读取对应的分割压缩数据进行压缩元操作,并将所述压缩结果数据放入写队列;写线程不停读取写队列,将压缩结果数据写入结果缓冲区进行拼接,同时释放写队列中已写入结果缓冲区的压缩结果数据,最终在结果缓冲区得到压缩完成的数据结果。本发明能够充分利用飞腾处理器多核多线的特点,具有数据压缩并发性好、数据压缩速度快、数据压缩效率高、兼容性好的优点。
【专利说明】基于飞腾处理器平台的多线程并发数据压缩方法
【技术领域】
[0001]本发明涉及计算机系统的数据并发压缩【技术领域】,具体涉及一种基于飞腾处理器平台的多线程并发数据压缩方法。
【背景技术】
[0002]随着计算机技术和信息科技的发展,数据成为了各行各业尤其重要并且保持飞速增长的资源。数据调查公司IDC报告显示,2011年的全球数据总量已达到1.8ZB(万亿GB),预计到2020年全球电子设备存储的数据将暴增至40ZB。数据量的不断增大给数据的存储和传输速度带来了巨大挑战,尤其大规模数据的压缩速度问题占用了大量cpu时间。为了满足各种用户的存储与传输需求,数据压缩技术显得尤为重要,大量应用于网络传输中。数据压缩技术将一个文件或信息压缩成自身大小的一半甚至更小的空间,以优化数据存储空间及数据传输效率。
[0003]传统的数据压缩优化技术大多基于x86体系结构;而飞腾处理器平台的飞腾处理器基于spare体系结构,与x86体系结构无法兼容。飞腾处理器平台下,大多数的应用程序调用的都是zIib压缩库,针对调用zlib压缩库时数据一般都处于单线调用,所以压缩速度慢、效率低的问题,而且同x86体系结构相比,飞腾处理器的单核处理能力较低,而传统的压缩程序都是针对单线程的,这就导飞腾平台上针对大文件压缩速度缓慢;但另一方面,飞腾处理器的多核并行处理能力突出,将压缩程序并行化,能充分利用多核处理器优势,减少压缩时间。
[0004]综上所述,目前飞腾处理器平台的数据压缩方法无法充分发挥飞腾处理器平台及数据压缩的多线程并发压缩能力。因此,研究高并发、高性能的的数据压缩方法是本领域技术人员极为关注的技术问题。现有研究中没有公开文献涉及在飞腾处理器平台上使用多线程并发压缩来提高压缩速度的方法。

【发明内容】

[0005]本发明要解决的技术问题是提供一种能够充分利用飞腾处理器多核多线的特点,数据压缩并发性好、数据压缩速度快、数据压缩效率高、兼容性好的基于飞腾处理器平台的多线程并发数据压缩方法。
[0006]为了解决上述技术问题,本发明采用的技术方案为:
一种基于飞腾处理器平台的多线程并发数据压缩方法,其实施步骤如下:
1)获取上层应用调用多线程并发数据压缩时传入的压缩参数,所述压缩参数包括待压缩数据所在的缓冲区起始地址和待压缩数据的长度;初始化用于存储各个压缩线程的分割压缩数据信息的压缩队列、用于存储各个压缩线程的压缩结果数据的写队列,同时开启一个用于将写队列的压缩结果数据进行拼接的写线程;
2)根据所述压缩参数中待压缩数据所在的缓冲区起始地址和待压缩数据的长度确定压缩线程的数量、每一个分割压缩数据的缓冲区起始地址和压缩数据大小,将每一个分割压缩数据的缓冲区起始地址和压缩数据大小作为分割压缩数据信息存入压缩队列;
3)根据确定的压缩线程的数量创建压缩线程,分别为各个压缩线程分配压缩队列中存储的分割压缩数据信息,每一个压缩线程在收到分割压缩数据信息后,根据分割压缩数据信息从缓冲区读取对应的分割压缩数据,然后对分割压缩数据进行压缩元操作在缓冲区得到一份压缩结果数据,并将所述压缩结果数据放入写队列;同时,通过所述写线程不停读取所述写队列,将所述写队列中的压缩结果数据写入结果缓冲区进行拼接,同时释放写队列中已写入结果缓冲区的压缩结果数据;在写线程完成拼接后,最终得到压缩的数据结果并将执行结果返回给上层应用。
[0007]进一步地,所述步骤3)中对分割压缩数据进行压缩元操作具体是指调用zlib压缩库对分割压缩数据进行压缩操作。
[0008]本发明基于飞腾处理器平台的多线程并发数据压缩方法具有下述技术效果:
1、本发明在上层应用程序调用压缩库中的函数接口来压缩数据时,根据缓冲区中的数据大小来判断开启的压缩进程数,自适应地创建多个子线程来进行压缩工作,且通过压缩队列存储各个压缩线程的分割压缩数据信息、通过写队列存储各个压缩线程的压缩结果数据,在压缩完成之后,开启一个写线程将各个线程得到的压缩结果合并起来,各个压缩线程之间相互独立,能够被调度在飞腾处理器的各个处理器核心中进行并行高速的压缩处理,改变了压缩在单一进程中运行的事实,提高了数据压缩的速度,从而能够充分利用飞腾处理器多核多线的特点,具有数据压缩并发性好、数据压缩速度快、数据压缩效率高的优点。
[0009]2.本发明步骤3)中对分割压缩数据进行压缩元操作进一步是指调用zlib压缩库对分割压缩数据进行压缩操作,因此采用的是库函数的方法为应用程序提供接口,而且接口与单线压缩调用兼容,用户不用修改现有代码即可使用多线程压缩,具有兼容性好的优点。
【专利附图】

【附图说明】
[0010]图1为本发明实施例的方法流程示意图。
[0011]图2为本发明实施例中压缩线程的工作流程示意图。
[0012]图3为本发明实施例中写线程的工作流程示意图。
【具体实施方式】
[0013]如图1所示,本实施例基于飞腾处理器平台的多线程并发数据压缩方法的实施步骤如下:
1)获取上层应用调用多线程并发数据压缩时传入的压缩参数,压缩参数包括待压缩数据所在的缓冲区起始地址和待压缩数据的长度;初始化用于存储各个压缩线程的分割压缩数据信息的压缩队列、用于存储各个压缩线程的压缩结果数据的写队列,同时开启一个用于将写队列的压缩结果数据进行拼接的写线程;
2)根据压缩参数中待压缩数据所在的缓冲区起始地址和待压缩数据的长度确定压缩线程的数量、每一个分割压缩数据的缓冲区起始地址和压缩数据大小,将每一个分割压缩数据的缓冲区起始地址和压缩数据大小作为分割压缩数据信息存入压缩队列;
3)根据确定的压缩线程的数量创建压缩线程,分别为各个压缩线程分配压缩队列中存储的分割压缩数据信息,每一个压缩线程在收到分割压缩数据信息后,根据分割压缩数据信息从缓冲区读取对应的分割压缩数据,然后对分割压缩数据进行压缩元操作在缓冲区得到一份压缩结果数据,并将压缩结果数据放入写队列;同时,通过写线程不停读取写队列,将写队列中的压缩结果数据写入结果缓冲区进行拼接,同时释放写队列中已写入结果缓冲区的压缩结果数据;在写线程完成拼接后,最终得到压缩的数据结果并将执行结果返回给上层应用。
[0014]本实施例中,步骤3)中对分割压缩数据进行压缩元操作具体是指调用zlib压缩库对分割压缩数据进行压缩操作,由于本实施例采用的是库函数的方法为应用程序提供接口,而且接口与单线压缩调用兼容,用户不用修改现有代码即可使用多线程压缩。本实施例中具体是调用zlib压缩库中的deflate压缩算法对分割压缩数据进行压缩操作,此外也可以根据需要调用zlib压缩库中的其它压缩算法,其原理与本实施例相同,在此不再赘述。
[0015]本实施例的主进程作为压缩线程和写线程的管理者,主进程负责为各个压缩线程分配压缩队列中存储的分割压缩数据信息,如果当前的压缩线程总数未达到最大值,则开启一个压缩线程,如果当前的压缩线程总数已经达到最大值,则压缩队列中的压缩工作等待,直到有压缩线程完成压缩工作后空闲。每个压缩线程将压缩后的结果放到写队列中去,写线程从写队列中获取写工作;所有压缩工作进行完后,主进程等待写线程将写队列中的所有数据写完,最后得到压缩后的数据结果。
[0016]如图2所示,本实施例中压缩线程的工作流程如下:(1A)在压缩队列中寻找压缩工作(job),收到压缩工作后,跳转执行下一步;(2A)对数据进行初始化,S卩,根据分割压缩数据信息从缓冲区读取对应的分割压缩数据;(3A)调用zlib压缩库中的deflate压缩算法对初始化的数据进行压缩元操作,在缓冲区得到一个压缩后的压缩结果数据;(4A)将压缩后的数据添加到写队列,等待写进程将其写到结果缓冲区。
[0017]如图3所示,本实施例中写线程的工作流程如下:(1B)在写队列中寻找写工作,直到收到写工作跳转执行下一步;(2B)将压缩后的压缩结果数据写到结果缓冲区;(3B)释放之前废弃的资源(即已经写入结果缓冲区的压缩结果数据),判断是否已经完成全部的压缩结果数据的写工作,如果还有写工作,则继续回到(1B),否则代表写线程已经完成拼接后,此时结果缓冲区中即为压缩的数据结果。
[0018]以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本【技术领域】的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
【权利要求】
1.一种基于飞腾处理器平台的多线程并发数据压缩方法,其特征在于实施步骤如下: 1)获取上层应用调用多线程并发数据压缩时传入的压缩参数,所述压缩参数包括待压缩数据所在的缓冲区起始地址和待压缩数据的长度;初始化用于存储各个压缩线程的分割压缩数据信息的压缩队列、用于存储各个压缩线程的压缩结果数据的写队列,同时开启一个用于将写队列的压缩结果数据进行拼接的写线程; 2)根据所述压缩参数中待压缩数据所在的缓冲区起始地址和待压缩数据的长度确定压缩线程的数量、每一个分割压缩数据的缓冲区起始地址和压缩数据大小,将每一个分割压缩数据的缓冲区起始地址和压缩数据大小作为分割压缩数据信息存入压缩队列; 3)根据确定的压缩线程的数量创建压缩线程,分别为各个压缩线程分配压缩队列中存储的分割压缩数据信息,每一个压缩线程在收到分割压缩数据信息后,根据分割压缩数据信息从缓冲区读取对应的分割压缩数据,然后对分割压缩数据进行压缩元操作在缓冲区得到一份压缩结果数据,并将所述压缩结果数据放入写队列;同时,通过所述写线程不停读取所述写队列,将所述写队列中的压缩结果数据写入结果缓冲区进行拼接,同时释放写队列中已写入结果缓冲区的压缩结果数据;在写线程完成拼接后,最终得到压缩的数据结果并将执行结果返回给上层应用。
2.根据权利要求1所述的基于飞腾处理器平台的多线程并发数据压缩方法,其特征在于:所述步骤3)中对分割压缩数据进行压缩元操作具体是指调用zlib压缩库对分割压缩数据进行压缩操作。
【文档编号】G06F9/38GK103984528SQ201410205022
【公开日】2014年8月13日 申请日期:2014年5月15日 优先权日:2014年5月15日
【发明者】吴庆波, 史佩昌, 单晋奎, 高珑, 夏若冰, 魏彦斌, 刘云, 黄雪娇 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1