海量数据拆分的多线程并行处理方法及其处理系统与流程
未命名
09-13
阅读:79
评论:0

1.本发明涉及海量数据处理领域,尤其涉及海量数据拆分的多线程并行处理方法及其处理系统。
背景技术:
2.在java业务中,数据量的不同会导致选取的数据处理方法的不同,例如少量数据,比如10条数据,完全可以人工处理,每条去逐一处理,哪怕上百条数据也可以酌情考虑采用同样的方式,但是如果数据上到千万级别,那就不是收工能解决的了,必须通过工具或者程序进行处理,与之更甚的海量数据的处理,那么必然要采用一些特殊的程序处理方法才能够有效合理的解决数据处理复杂且耗时长的问题。
3.目前,在遇到一些海量数据的导入,查询,删除等,如果只是单线程的操作,就会导致一个网络请求的响应时间很长,用户体验感变差,其原因就是,单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。
4.综上所述,现有技术中对海量数据的处理响应时间较为漫长,系统资源利用率较为低下。
技术实现要素:
5.有鉴于此,本发明提供海量数据拆分的多线程并行处理方法及其处理系统,旨在解决上述全部或部分技术问题。
6.为解决以上技术问题,本发明的技术方案为提供海量数据拆分的多线程并行处理方法,包括:构建总任务列表,并将执行所述总任务的全部数据导入所述总任务列表中;基于所述总任务列表,生成若干个子任务列表,并将所述全部数据拆分,划分至各子任务列表中;构建线程池,并分配所述线程池中的空闲线程分别执行总任务列表中的总任务和各子任务列表中的子任务,所述空闲线程与任务列表一一对应;基于分配的空闲线程数量设置信号枪初始值,所述信号枪包含有倒计数器;将倒计数添加至每个子任务列表中的末尾字节之后,以使每个子任务列表中的全部数据处理完成后,触发所述倒计数器的数值发生改变;判断所述信号枪中的倒计数器值是否为0,若为0,则各子任务列表中的全部任务完成,汇总各子任务列表中的子任务完成结果至所述总任务列表中,得到总任务结果。
7.可选的,所述基于所述总任务列表,生成若干个子任务列表,并将所述全部数据拆分,划分至各子任务列表中,包括:基于所述总任务列表,确定总任务列表属性,所述总任务列表属性至少包含有业务逻辑属性和服务器性能的其中一个;根据所述总任务列表属性,确定子任务列表属性,生成子任务列表属性对应数量
的子任务列表;将所述全部数据根据所述子任务列表属性划分至对应的子任务列表中。
8.可选的,所述子任务列表属性包含有相同任务列表属性和不同任务列表属性,具体的,当采用业务逻辑属性作为总任务列表属性时,所述子任务列表属性为不同的任务列表属性;当采用服务器性能作为总任务列表属性时,所述子任务列表属性为相同的任务列表属性。
9.可选的,所述将倒计数添加至每个子任务列表中的末尾字节之后,以使每个子任务列表中的全部数据处理完成后,触发所述倒计数器的数值发生改变,包括:将倒计数添加至每个子任务列表中的末尾字节;与各子任务列表对应的空闲线程同时处理各子任务列表中的任务数据;直至空闲线程将所述子任务列表中的全部数据处理完成后,所述倒计数触发所述倒计数器的数值对应减1。
10.可选的,所述判断所述信号枪中的倒计数器值是否为0的方法,包括:与总任务列表对应的空闲线程调用await方法判断所述信号枪中的倒计数器值是否为0。
11.可选的,所述判断所述信号枪中的倒计数器值是否为0之后,还包括:若所述倒计数器值不为0,则阻塞与总任务列表对应的空闲线程,直至与子任务列表对应的空闲线程全部完成。
12.可选的,完成对应子任务列表全部数据处理的空闲线程返回线程池,重新进行线程池任务分配。
13.相应的,本发明还提供一种海量数据拆分的多线程并行处理系统,包括:总任务列表模块,用于构建总任务列表,并将执行所述总任务的全部数据导入所述总任务列表中;数据拆分模块,用于基于所述总任务列表,生成若干个子任务列表,并将所述全部数据拆分,划分至各子任务列表中;线程池构建模块,用于构建线程池,并分配所述线程池中的空闲线程分别执行总任务列表中的总任务和各子任务列表中的子任务,所述空闲线程与任务列表一一对应;信号枪设置模块,用于基于分配的空闲线程数量设置信号枪初始值,所述信号枪包含有倒计数器;倒计数添加模块,用于将倒计数添加至每个子任务列表中的末尾字节之后,以使每个子任务列表中的全部数据处理完成后,触发所述倒计数器的数值发生改变;数值判断模块,用于判断所述信号枪中的倒计数器值是否为0,若为0,则各子任务列表中的全部任务完成,汇总各子任务列表中的子任务完成结果至所述总任务列表中,得到总任务结果。
14.相应的,本发明还提供一种存储介质,存储有计算机程序,所述计算机程序被执行时可实现上述任意一项所述的海量数据拆分的多线程并行处理方法。
15.相应的,本发明还提供一种计算机设备,包括中央处理器和存储器,所述存储器内
存储有计算机程序,当所述计算机程序被中央处理器执行时,可实现上述任意一项所述的海量数据拆分的多线程并行处理方法。
16.本发明的有益之处在于:通过构建总任务列表,将执行总任务的全部数据导入其中,并基于总任务列表,生成若干个子任务列表,将全部数据拆分,并根据列表属性划分至各子任务列表中,进而构建线程池,并分配空闲线程分别执行总任务和子任务,基于分配的空闲线程数量设置包括有倒计数器的信号枪初始值,将倒计数添加至每个子任务列表中的末尾字节之后,以使全部数据处理完成后,触发所述倒计数器的数值发生改变,根据倒计数器数值判断任务是否全部完成,实现了程序中操作海量数据响应时间的优化,充分利用系统资源,减少程序响应时间,提升用户对软件的体验度。
附图说明
17.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图做简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。
18.图1是本发明一实施例提供的海量数据拆分的多线程并行处理方法的步骤示意图;图2是本发明一实施例提供的海量数据拆分的多线程并行处理系统的结构示意图;图3是本发明一实施例提供的一种计算机设备的结构示意图。
具体实施方式
19.为了使本领域技术人员更好的理解本发明实施例,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
20.参照图1,是本发明一实施例提供的海量数据拆分的多线程并行处理方法的步骤示意图,s11、构建总任务列表,并将执行总任务的全部数据导入总任务列表中。
21.首先构建总任务列表,将海量数据的导入、查询等操作视为一个整体的总任务,导入至该总任务列表中。
22.s12、基于总任务列表,生成若干个子任务列表,并将全部数据拆分,划分至各子任务列表中,基于所述总任务列表,确定总任务列表属性,所述总任务列表属性至少包含有业务逻辑属性和服务器性能的其中一个;根据所述总任务列表属性,确定子任务列表属性,生成子任务列表属性对应数量的子任务列表;将所述全部数据根据所述子任务列表属性划分至对应的子任务列表中。
23.进一步的,当采用业务逻辑属性作为总任务列表属性时,子任务列表属性为不同的任务列表属性;当采用服务器性能作为总任务列表属性时,子任务列表属性为相同的任
务列表属性。
24.进一步的,例如商品下单运费总任务,可以拆分为商品本身运费,运费险,偏远地区运费,“商品下单运费”为总任务列表属性,子任务列表属性为不同的任务列表属性,分别为“商品本身运费”、“运费险”、“偏远地区运费”。
25.进一步的,例如大数据批量入库总任务,可以根据服务器内存大小,来评估服务器一个线程的最大吞吐量,比如一个线程一次处理10000条数据最快,那就可以按照10000条作为标准来拆分总任务,最后分为n段任务,每段任务都是10000条数据,此时,“大数据批量入库”为总任务列表属性,“10000条数据”为子任务列表属性。
26.更进一步的,为了保证数据的完整性,拆分后的数据总和必须等于大任务中的数据总和。若大数据批量入库总任务,根据服务器内存大小,来评估服务器一个线程的最大吞吐量,比如一个线程一次处理10000条数据最快,那我们就可以按照10000条作为标准来拆分总任务,用总数据量/10000,如果能整除,那么就是分为 (总数据量/10000)段任务;如果不能整除,就 (总数据量/10000取整数位+1)段任务,这样多出来且不满10000的数据,我们也可以分一段,以保证数据的完整性。
27.s13、构建线程池,并分配线程池中的空闲线程分别执行总任务列表中的总任务和各子任务列表中的子任务,空闲线程与任务列表一一对应;在java程序中,线程是有一个生命周期的。在一个用户请求下,java进程会为这个请求分配一个线程去做这件事,直到这个线程执行完这个请求后,就消亡了。如果是在海量数据查询下,则一个线程的执行时间就会非常漫长,而线程池,相当于是一个池子,里面放的是大量线程,当有任务来到线程池时,就从池中拿一个空闲线程去执行,执行完成后,又把该线程放回到池中,等待下一个请求。
28.即针对总任务列表中的总任务会有一条主线程去执行,总任务列表生成的各子任务列表中的子任务由线程池中其他的空闲线程去执行,也就从单线程处理变成了多线程处理,其中,每一条空闲线程均执行对应的一个子任务列表中的全部数据处理,也可以理解为,在单一子任务列表中,对应的空闲线程是进行的单线程处理,而对于总任务列表来说,该空闲线程仅处理了其中一个子任务,属于多线程中的其中一条。
29.s14、基于分配的空闲线程数量设置信号枪初始值,信号枪包含有倒计数器;基于分配的空间线程数量得到总的子任务列表数量,通过countdownlatch(倒计数器)作为信号枪,把总的线程数量设置到countdownlatch中,得到一个包含总数的信号枪。
30.s15、将倒计数添加至每个子任务列表中的末尾字节之后,以使每个子任务列表中的全部数据处理完成后,触发倒计数器的数值发生改变;得到包含总数的信号枪之后,由线程池分配空闲线程去执行对应的子任务列表中的子任务,在每个子任务的末尾字节之后加上一个countdown(倒计数)方法,无论该子任务执行是成功或失败,信号枪中的计数器都会对应减1。其中,countdown的作用就是让信号枪中的计数器对应减1。
31.需要说明的是,若该子任务执行失败,则可以通过先收集,后续人工进行任务补偿,对该执行失败的子任务进行补偿处理。
32.s16、判断信号枪中的倒计数器值是否为0,若为0,则各子任务列表中的全部任务
完成,汇总各子任务列表中的子任务完成结果至总任务列表中,得到总任务结果。
33.由于子任务是由线程池中的空闲线程去完成的,而主线程是需要等待所有的子任务都完成后,才能继续往下执行,所以主线程中会调用await方法,await方法会去判断countdownlatch信号枪中的计数器值是否为0,如果不是0,就会阻塞主线程,等待所有的子任务线程都执行完,当最后一个子任务执行完成,await方法判断到countdownlatch值为0后,说明所有的小任务都完成了,则代表总任务也完成了,主线程就可以继续往下执行了。
34.本实施例提供一种海量数据拆分的多线程并行处理方法,通过构建总任务列表,并将执行总任务的全部数据导入总任务列表中;基于总任务列表,生成若干个子任务列表;将全部数据拆分,并根据列表属性划分至各子任务列表中;构建线程池,并分配线程池中的空闲线程分别执行总任务列表中的总任务和各子任务列表中的子任务,空闲线程与任务列表一一对应;基于分配的空闲线程数量设置信号枪初始值,信号枪包含有倒计数器;将倒计数添加至每个子任务列表中的末尾字节之后,以使每个子任务列表中的全部数据处理完成后,触发倒计数器的数值发生改变;判断信号枪中的倒计数器值是否为0,若为0,则各子任务列表中的全部任务完成,汇总各子任务列表中的子任务完成结果至总任务列表中,得到总任务结果。实现了程序中操作海量数据响应时间的优化,充分利用系统资源,减少程序响应时间,提升用户对软件的体验度。
35.相应的,本发明还提供海量数据拆分的多线程并行处理系统,如图2所示的该处理系统的结构示意图,包括:总任务列表模块,用于构建总任务列表,并将执行总任务的全部数据导入总任务列表中;数据拆分模块,用于基于总任务列表,生成若干个子任务列表,并将全部数据拆分,划分至各子任务列表中;线程池构建模块,用于构建线程池,并分配线程池中的空闲线程分别执行总任务列表中的总任务和各子任务列表中的子任务,空闲线程与任务列表一一对应;信号枪设置模块,用于基于分配的空闲线程数量设置信号枪初始值,所述信号枪包含有倒计数器;倒计数添加模块,用于将倒计数添加至每个子任务列表中的末尾字节之后,以使每个子任务列表中的全部数据处理完成后,触发倒计数器的数值发生改变;数值判断模块,用于判断信号枪中的倒计数器值是否为0,若为0,则各子任务列表中的全部任务完成,汇总各子任务列表中的子任务完成结果至总任务列表中,得到总任务结果。
36.相应的,本发明还提供一种存储介质,存储有计算机程序,该计算机程序被执行时可实现上述实施例中任意一项海量数据拆分的多线程并行处理方法。
37.相应的,本发明还提供一种计算机设备,如图3所示,包括中央处理器s1001和存储器s1002,该存储器内存储有计算机程序,当计算机程序被中央处理器执行时,可实现上述实施例中中任意一项海量数据拆分的多线程并行处理方法。
38.以上对本发明实施例所提供的海量数据拆分的多线程并行处理方法及其处理系统。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由
于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
39.专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
技术特征:
1.海量数据拆分的多线程并行处理方法,其特征在于,包括:构建总任务列表,并将执行所述总任务的全部数据导入所述总任务列表中;基于所述总任务列表,生成若干个子任务列表,并将所述全部数据拆分,划分至各子任务列表中;构建线程池,并分配所述线程池中的空闲线程分别执行总任务列表中的总任务和各子任务列表中的子任务,所述空闲线程与任务列表一一对应;基于分配的空闲线程数量设置信号枪初始值,所述信号枪包含有倒计数器;将倒计数添加至每个子任务列表中的末尾字节之后,以使每个子任务列表中的全部数据处理完成后,触发所述倒计数器的数值发生改变;判断所述信号枪中的倒计数器值是否为0,若为0,则各子任务列表中的全部任务完成,汇总各子任务列表中的子任务完成结果至所述总任务列表中,得到总任务结果。2.根据权利要求1所述的海量数据拆分的多线程并行处理方法,其特征在于,所述基于所述总任务列表,生成若干个子任务列表,并将所述全部数据拆分,划分至各子任务列表中,包括:基于所述总任务列表,确定总任务列表属性,所述总任务列表属性至少包含有业务逻辑属性和服务器性能的其中一个;根据所述总任务列表属性,确定子任务列表属性,生成子任务列表属性对应数量的子任务列表;将所述全部数据根据所述子任务列表属性划分至对应的子任务列表中。3.根据权利要求2所述的海量数据拆分的多线程并行处理方法,其特征在于,所述子任务列表属性包含有相同任务列表属性和不同任务列表属性,具体的,当采用业务逻辑属性作为总任务列表属性时,所述子任务列表属性为不同的任务列表属性;当采用服务器性能作为总任务列表属性时,所述子任务列表属性为相同的任务列表属性。4.根据权利要求1所述的海量数据拆分的多线程并行处理方法,其特征在于,所述将倒计数添加至每个子任务列表中的末尾字节之后,以使每个子任务列表中的全部数据处理完成后,触发所述倒计数器的数值发生改变,包括:将倒计数添加至每个子任务列表中的末尾字节;与各子任务列表对应的空闲线程同时处理各子任务列表中的任务数据;直至空闲线程将所述子任务列表中的全部数据处理完成后,所述倒计数触发所述倒计数器的数值对应减1。5.根据权利要求1所述的海量数据拆分的多线程并行处理方法,其特征在于,所述判断所述信号枪中的倒计数器值是否为0的方法,包括:与总任务列表对应的空闲线程调用await方法判断所述信号枪中的倒计数器值是否为0。6.根据权利要求1所述的海量数据拆分的多线程并行处理方法,其特征在于,所述判断所述信号枪中的倒计数器值是否为0之后,还包括:若所述倒计数器值不为0,则阻塞与总任务列表对应的空闲线程,直至与子任务列表对
应的空闲线程全部完成。7.根据权利要求1所述的海量数据拆分的多线程并行处理方法,其特征在于,完成对应子任务列表全部数据处理的空闲线程返回线程池,重新进行线程池任务分配。8.海量数据拆分的多线程并行处理系统,其特征在于,包括:总任务列表模块,用于构建总任务列表,并将执行所述总任务的全部数据导入所述总任务列表中;数据拆分模块,用于基于所述总任务列表,生成若干个子任务列表,并将所述全部数据拆分,划分至各子任务列表中;线程池构建模块,用于构建线程池,并分配所述线程池中的空闲线程分别执行总任务列表中的总任务和各子任务列表中的子任务,所述空闲线程与任务列表一一对应;信号枪设置模块,用于基于分配的空闲线程数量设置信号枪初始值,所述信号枪包含有倒计数器;倒计数添加模块,用于将倒计数添加至每个子任务列表中的末尾字节之后,以使每个子任务列表中的全部数据处理完成后,触发所述倒计数器的数值发生改变;数值判断模块,用于判断所述信号枪中的倒计数器值是否为0,若为0,则各子任务列表中的全部任务完成,汇总各子任务列表中的子任务完成结果至所述总任务列表中,得到总任务结果。9.一种存储介质,其特征在于,存储有计算机程序,所述计算机程序被执行时可实现权利要求1-7中任意一项所述的海量数据拆分的多线程并行处理方法。10.一种计算机设备,其特征在于,包括中央处理器和存储器,所述存储器内存储有计算机程序,当所述计算机程序被中央处理器执行时,可实现权利要求1-7中任意一项所述的海量数据拆分的多线程并行处理方法。
技术总结
本发明公开海量数据拆分的多线程并行处理方法及其处理系统,通过构建总任务列表,将执行总任务的全部数据导入其中,并基于总任务列表,生成若干个子任务列表,将全部数据拆分,并根据列表属性划分至各子任务列表中,进而构建线程池,并分配空闲线程分别执行总任务和子任务,基于分配的空闲线程数量设置包括有倒计数器的信号枪初始值,将倒计数添加至每个子任务列表中的末尾字节之后,以使全部数据处理完成后,触发所述倒计数器的数值发生改变,根据倒计数器数值判断任务是否全部完成,实现了程序中操作海量数据响应时间的优化,充分利用系统资源,减少程序响应时间,提升用户对软件的体验度。体验度。体验度。
技术研发人员:葛辉
受保护的技术使用者:成都芯软科技股份公司
技术研发日:2023.08.02
技术公布日:2023/9/9
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/