CN110058940B - 一种多线程环境下的数据处理方法及装置 - Google Patents
一种多线程环境下的数据处理方法及装置 Download PDFInfo
- Publication number
- CN110058940B CN110058940B CN201910174014.8A CN201910174014A CN110058940B CN 110058940 B CN110058940 B CN 110058940B CN 201910174014 A CN201910174014 A CN 201910174014A CN 110058940 B CN110058940 B CN 110058940B
- Authority
- CN
- China
- Prior art keywords
- data
- thread
- request
- lines
- ratio
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例公开了一种多线程环境下的数据处理方法及装置,涉及大数据技术领域,能够提高线程资源的使用率,减少低负载、空置线程的情况。本发明包括:获取请求行数和分包大小,利用所述请求行数和所述分包大小确定线程数,其中,所述请求行数表示请求数据中的数据行的总数,所述分包大小表示每个线程处理请求行的最大数;对所述请求数据进行分组,得到至少2个任务组;根据所确定的线程数,为各任务组分配线程资源。本发明适用于处理多线程环境下的海量请求。
Description
技术领域
本发明涉及大数据技术领域,尤其涉及一种多线程环境下的数据处理方法及装置。
背景技术
多线程均衡处理一批实时或异步的业务数据,均衡的为每个线程分配相对等量的业务数据。其中,这些业务数据可以是无相互依赖或无相互竞争的业务数据,也可以是存在有资源争抢情况的业务数据。
在目前的应用方案中,当一个请求有很多行的数据来临,为了提高处理速度,采用多线程处理,如果线程池线程足够,程序会在线程池中为每一行数据获取一个线程处理。
但是,随着网站流量的提高,多个或大量请求同时来临时,会用尽机器的线程,由于操作系统的线程分配太多,上下文频繁切换,并且线程分配的任务不均衡会进一步导致请求处理变的缓慢。且还由于线程分配的任务不均衡,有的线程处理数据行数多,花的时间长,有的线程处理的行数少,花的时间短,但最终要统一等到所有线程处理完成才返回,线程资源不能充分利用。
发明内容
本发明的实施例提供一种多线程环境下的数据处理方法及装置,能够提高线程资源的使用率,减少低负载、空置线程的情况。
为达到上述目的,本发明的实施例采用如下技术方案:
根据所确定的线程数,为各任务组分配线程资源。
确定各业务数据之间的关系,所述各业务数据与所述请求数据关联;其中,所述各业务数据之间的关系包括:所述各业务数据之间无相互依赖关系,或者,所述各业务数据之间为依赖关系。若所确定的线程数大于最大处理的线程总数,则根据所述请求行数和所述最大处理的线程总数,更新所述任务组大小,其中,所述最大处理的线程总数表示一个请求允许开启的最大线程数。
获取请求行数和分包大小,利用所述请求行数和所述分包大小确定线程数,其中,所述请求行数表示请求数据中的数据行的总数,所述分包大小表示每个线程处理请求行的最大数;对所述请求数据进行分组,得到至少2个任务组;根据所确定的线程数,为各任务组分配线程资源。
其中,所述利用所述请求行数和所述分包大小确定线程数,包括:当所述各业务数据之间的关系为无相互依赖关系时,获取所述请求行数与所述分包大小的比值;若所述比值为整数,则将所述比值作为所述线程数。若所述比值不为整数,则获取所述分包大小与所述比值的整数的乘积,并得到所述请求行数与所述乘积的差值;根据所述差值,将多出的请求行数量依次分配至各个分包,并记录分配后的分包的最大值;利用所述分包的最大值更新所述任务组大小。
进一步的,所述利用所述请求行数和所述分包大小确定线程数,包括:
当所述各业务数据之间的关系存在依赖关系时,获取存在依赖关系的业务数据的类别数量,和各个类别的存在依赖关系的业务数据的数据行数;
若各个类别的数据行数全部都小于或等于所述分包大小,则所述分包大小不变;若存在至少一个类别的数据行数大于所述分包大小,则将最大的数据行数设定为所述分包大小;
获取所述请求行数与当前的分包大小的比值,若所述比值为整数,则将所述比值作为所述线程数;
若所述比值不为整数,则向上舍入数字取整数后作为所述线程数。
在得到所述线程数n后,获取排序队列中的第n个和第n+1个类别的数据行数,其中,各个类别的数据行数按照数值从大到小的顺序排列得到所述排序队列;
将所述第n个和第n+1个类别的数据行数合并为一个任务组,并按照数值从大到小的顺序对所述排序队列重新进行排列,其中,任务组的数值为任务组中的数据行数之和;
重复上述过程,直至队列中存在第1至第N任务组,其中,N等于所述线程数。
获取第1任务组中的数据行数最大的类别,和第N任务组中的数据行数最小的类别,并将二者进行互换,每次互换后按照数值从大到小的顺序对所述排序队列重新进行排列;
重复N-1次后,按照数值从大到小的顺序重新进行排列,并利用重复N-1次后的排列更新所述任务组大小。
本实施例的方案,通过提高线程资源的使用率,减少低负载、空置线程的情况,减少线程资源的浪费的同时,也减少了所需分配的线程总量,缓减线程数量一多则又会造成上下文频繁切换的问题。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例提供的系统架构示意图;
图2为本发明实施例提供的方法流程示意图;
图3、4为本发明实施例提供的具体实例的示意图;
图5为本发明实施例提供的装置结构示意图。
具体实施方式
为使本领域技术人员更好地理解本发明的技术方案,下面结合附图和具体实施方式对本发明作进一步详细描述。下文中将详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的任一单元和全部组合。本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。
本实施例中的方法流程,具体可以在一种如图1所示的系统上执行,该系统包括:应用服务器、处理服务器和数据库。
其中,应用服务器具体应用提供各类业务服务,比如:地址翻译、策略规划、报表管理、信息检索窗口等。在实际应用中,应用服务器可以理解为对接物流系统、用户系统、客服系统等已有业务系统的服务器,并用于为这些业务系统提供应用服务。本实施例中所揭示的应用服务器,具体可以是服务器、工作站、超级计算机等设备,或者是由多个服务器组成的一种用于数据处理的服务器集群系统。通常的,应用服务器在通过所运行的业务系统的提供各类业务服务时,会产生大量的业务数据,这些业务数据可以根据具体的业务场景划分为不同的类型,比如订单、用户信息、地址、运单等等,并且不同类型的业务数据相互之间不相互依赖,或者处于相互竞争的关系,具体的关联关系依据业务场景而定。应用服务器可以向数据库或者处理服务器发送请求数据,这些请求通常包括了很多数据行。
处理服务器,主要用于实现本实施例的方案。比如确定各业务数据之间的关系,所述各业务数据与所述请求数据关联,以及执行线程资源的分配等操作。具体可以是包括存储设备的数据服务器以及与数据服务器相连的存储设备,或者是由多个数据服务器和存储服务器组成的一种用于数据库的服务器集群系统。
本发明实施例提供一种多线程环境下的数据处理方法,如图2所示,包括:
S101、获取请求行数和分包大小,利用所述请求行数和所述分包大小确定线程数。
其中,所述请求行数表示请求数据中的数据行的总数。所述分包大小表示每个线程处理请求行的最大数。
S102、对所述请求数据进行分组,得到至少2个任务组。
其中,请求数据可以包括应用服务器直接发出的请求消息;请求数据也可以包括接入了应用服务器的用户终端向应用服务器发出访问请求后,应用服务器向处理服务器发出的请求消息;再或者,请求数据还可以包括用户终端直接发出的请求消息;亦或者,请求数据包括上述三种,或者网络中的更多节点设备发出的请求消息。对于处理服务器来说,这些接收到的请求消息本质上都是数据,如果为表格类的数据则其中包括了多条数据行。
在本实施例中,处理服务器会将待处理的请求数据划分为多个部分,并分配给各个任务,每个任务都会分配线程资源。每个任务中处理的请求数据中的那一部分,可以理解为任务组。
在实际应用中,任务的建立、数据的划分等过程的实现手段,可以采用目前大数据领域中常见的多任务处理方案、并行处理方案等。
S103、根据所确定的线程数,为各任务组分配线程资源。
其中,线程资源按组单位分配,每个线程处理的任务组,组之间的任务数据均衡。有资源争抢数据多线程处理,相同资源争抢维度的按组单位分配,每个线程处理的任务组,组之间的任务数均衡。
通过均衡分组行数算法,分配任务给每个线程。系统各个服务在使用多线程场景时,将请求按行分组,按组单位分配线程,通过均衡分组行数算法,相对公平的分配任务给每个线程。系统各个业务场景在使用多线程场景时,将具有资源争抢的数据分成一个类别,多个类别再按组单位分配线程,通过均衡分组行数算法,相对公平的分配任务给每个线程。
在目前已有的的方案中:线程数的求取方式通常是:线程数=向上舍入数字(请求行数/分包大小)。例如:请求行数假设有23行,分包大小配置为10,那么,线程数=向上舍入数字(23/10)=3,需要分配3个线程,处理本次请求。最终每个线程处理的行数大小结果是:10、10、3。这就导致了线程资源的浪费和分配不均,最后一组处理的任务太少,先处理完成,然后等待其它两个线程的处理结果,不能把多线程的能力完成发挥出来。尤其是处于同时接收到大量请求的情况下,处理服务器需要分配很多线程,而线程数量一多则又会造成上下文频繁切换的问题,从而整体处理效率下降。
本实施例的方案,通过提高线程资源的使用率,减少低负载、空置线程的情况,减少线程资源的浪费的同时,也减少了所需分配的线程总量,缓减线程数量一多则又会造成上下文频繁切换的问题。
具体的,在处理服务器接收到请求数据后,还需要确定各业务数据之间的关系。
其中,各业务数据与所述请求数据关联,例如:请求数据具体为一种访问库存业务系统的请求消息,指向的是库存查询功能接口,则与该请求消息关联的业务数据即包括了库存查询功能接口对应的库存信息,如:商品编码、剩余库存量、库存量波动范围等。而各个业务数据之间的关系包括:所述各业务数据之间无相互依赖关系,或者,所述各业务数据之间为依赖关系。
需要说明的是,依赖关系可以称为竞争关系,通常用于表示数据之间的联系,比如:请求中某写数据,存表时唯一索引一致,若不考虑依赖则可造成存表失败;又如:某些数据获取分布式锁时,对应分布式锁的key一致,若不考虑依赖,则会造成同时获取相同锁请求处理失败。
进一步的,还包括:若所确定的线程数大于最大处理的线程总数,则根据所述请求行数和所述最大处理的线程总数,更新所述任务组大小。
其中,所述最大处理的线程总数表示一个请求允许开启的最大线程数。具体的,处理服务器通过分包大小和请求的行数计算出使用的线程数,超过这个线程数则反过来计算分包大小。而对于无相互依赖的业务数据,以及为依赖关系的业务数据,则具体分为2种类处理方式。
对于无相互依赖的业务数据:
步骤S101中,所述利用所述请求行数和所述分包大小确定线程数,包括:
当所述各业务数据之间的关系为无相互依赖关系时,获取所述请求行数与所述分包大小的比值。
若所述比值为整数:则将所述比值作为所述线程数。
若所述比值不为整数:则获取所述分包大小与所述比值的整数的乘积,并得到所述请求行数与所述乘积的差值。根据所述差值,将多出的请求行数量依次分配至各个分包,并记录分配后的分包的最大值。利用所述分包的最大值更新所述任务组大小。
例如:分组大小=向下舍入数字(请求行数/线程数),带入上例数据后:分组大小=向下舍入数字(22/3)=7。按照分组大小7,来给3个线程分配请求,3个线程分配的结果依次为:7,7,7。
总共分配了21个请求行,还有未分配的行,还需要对未分配的请求行继续分配。未分配的行数=请求行数-分组大小*线程数,带入上例数据后:未分配的行数=23-7*3=2,继续分配余下“未分配的行数”,分配方法为:从第一组开始每组分配1个请求行,最终结果为:8,8,7。使得请求任务组的分配过程按照上述“每个线程的分配数据行数”,顺序从第一条截取,第一组数据截取范围为1-8,第二组数据截取范围为9-16,第三组数据17-23。最后创建3个线程分别处理上述3组的数据。实现的具体流程如图3所示的,最终有效的控制了线程的使用量,又使得每个线程都能够均衡的处理对应的请求数据。实现了线程资源按组单位分配,每个线程处理的任务组,组之间的任务数据均衡。
目前一些在线购物网站的库存销售锁定和交货锁定相关的业务中,产生的业务数据大多是无相互依赖或无相互竞争的业务数据。
对于依赖关系的业务数据:
当一个请求有资源争抢的多行数据来临,为了避免多线程抢占数据造成业务失败,如:同时保存有唯一索引的表或同时获取数据对应的应用锁,而采取单线程处理或按照有争抢的数据分组,每组单线程处理,多组竞争获取线程资源。在数据间存在争抢资源的情况下,会造成某些线程获取争抢资源失败。例如,目前一些在线购物网站的库存采购和库存管理相关的业务中,产生的业务数据大多是存在有资源争抢情况的业务数据。
步骤S101中,所述利用所述请求行数和所述分包大小确定线程数,包括:
当所述各业务数据之间的关系存在依赖关系时,获取存在依赖关系的业务数据的类别数量,和各个类别的存在依赖关系的业务数据的数据行数。
若各个类别的数据行数全部都小于或等于所述分包大小,则所述分包大小不变。若存在至少一个类别的数据行数大于所述分包大小,则将最大的数据行数设定为所述分包大小。
获取所述请求行数与当前的分包大小的比值,若所述比值为整数,则将所述比值作为所述线程数。
若所述比值不为整数,则向上舍入数字取整数后作为所述线程数。
举例来说:将业务需要处理的多行数据按照有资源争抢的维度细分一个个类别,汇总每个类别的数据行数,按照类别的行数从大到小排序,取出类别最大的行数,并且汇总业务的请求总行数。类别最大的行数于配置的分包大小比较,取较大的作为最终的分组行数。
通过分包行数和请求行数计算出需要预分配的线程数。预分配线程数=向上舍入数字(请求总行数/分包行数)。
假设业务场景总的请求行数为52行,其中有资源争抢的维度有8个。参考如图4所示的流程:配置分组大小和最大线程数,假设为19和8;
按有资源争抢的维度分类,且每个分类的行数按从大到小排序。假设每个类型的行数分别为:8,8,7,7,6,6,5,5;
最大类别行数与配置的分组行数比较,最终分组行数取两者值较大的一个,即:8<19结果为true,分组行数最终为19;
预分配线程数=向上舍入数字(请求总行数/分包行数),因此预分配线程数=向上舍入数字(52/19)=3。
进一步的,还包括:
在得到所述线程数n后,获取排序队列中的第n个和第n+1个类别的数据行数。将所述第n个和第n+1个类别的数据行数合并为一个任务组,并按照数值从大到小的顺序对所述排序队列重新进行排列。重复上述过程,直至队列中存在第1至第N任务组。
其中,各个类别的数据行数按照数值从大到小的顺序排列得到所述排序队列。任务组的数值为任务组中的数据行数之和。N等于所述线程数。参考如图4所示的流程:取之前排序好的类别,每个类别也即为一组,从第“预分配线程数”个,与“预分配线程数+1”个合并类别成为一组,合并之后再排序,排序后重复以上操作,直到完成分配所有的类别。合并分组过程包括:
1:原8,8,7,7,6,6,5,5。从第“预分配线程数”个,与“预分配线程数+1”个合并类别成为一组,合并之后再排序。
2:合并后8,8,7+7,6,5,5。排序后:7+7,8,8,6,6,5,5。
3:重复1和2两步结果为:7+7,8+6,8,6,5,5。
重复1和2两步结果为:7+7,8+6,8+6,5,5。
重复1和2两步结果为:8+6+5,7+7,8+6,5。
重复1和2两步结果为:8+6+5,8+6+5,7+7。
最终合并和所有的类别,成为3组。
之后还包括:获取第1任务组中的数据行数最大的类别,和第N任务组中的数据行数最小的类别,并将二者进行互换,每次互换后按照数值从大到小的顺序对所述排序队列重新进行排列。重复N-1次后,按照数值从大到小的顺序重新进行排列,并利用重复N-1次后的排列更新所述任务组大小。参考如图4所示的流程:统计分组中大于1个类别的分组。若有大于1个的分组,则进行组间的类别互换。
互换原则:取排序第1位的分组大的类别与排序最后分组类别互换,类别行数之间的差值小于等于组之间行数差值的一半。互换次数=分组数–1。互换完成后再排序。
例如:互换次数为:分组中大于1个类别的分组数–1=3-1=2次。
按照互换原则互换:第一次:取排序第1位分组大的类别与排序最后分组小的类别互换元素。第一组的8与最后一组的7互换,结果为:7+6+5,8+6+5,7+8。排序后:8+6+5,7+6+5,7+8。第二次:7+6+5,7+6+5,8+8。排序后:8+8,7+6+5,7+6+5。
最终,请求总行数52,分成了3个分组,按组单位分配线程,每个线程处理的行数依次为16,18,18。
本实施例在实际应用中,可以采取多个业务场景共享一个线程池,避免或缓解某几个实时或异步接口请求行多且请求量大时,用尽线程池的线程资源,致使其它接口超时或失败。通过为线程池中的每个线程相对公平的分配等量的任务,减少线程资源的等待,提升利用率。并且可以进一步的灵活控制使用线程资源每个场景,比如:核心业务可以多分线程,非核心或异步处理的业务少分线程。最终有效的控制了线程的使用量,又使得每个线程都能够均衡的处理有资源争抢的请求数据。
本发明实施例中还提供一种多线程环境下的数据处理装置,如图5所示的,包括:
预处理模块,用于获取请求行数和分包大小,利用所述请求行数和所述分包大小确定线程数,其中,所述请求行数表示请求数据中的数据行的总数,所述分包大小表示每个线程处理请求行的最大数;
分组模块,用于对所述请求数据进行分组,得到至少2个任务组;
分配模块,用于根据所确定的线程数,为各任务组分配线程资源。
进一步的,还包括:
分析模块,用于确定各业务数据之间的关系,所述各业务数据与所述请求数据关联,其中,所述各业务数据之间的关系包括:所述各业务数据之间无相互依赖关系,或者,所述各业务数据之间为依赖关系;
若所确定的线程数大于最大处理的线程总数,则根据所述请求行数和所述最大处理的线程总数,更新所述任务组大小,其中,所述最大处理的线程总数表示一个请求允许开启的最大线程数。
其中,所述预处理模块,具体用于:
当所述各业务数据之间的关系为无相互依赖关系时,获取所述请求行数与所述分包大小的比值;若所述比值为整数,则将所述比值作为所述线程数;
若所述比值不为整数,则获取所述分包大小与所述比值的整数的乘积,并得到所述请求行数与所述乘积的差值;根据所述差值,将多出的请求行数量依次分配至各个分包,并记录分配后的分包的最大值;利用所述分包的最大值更新所述任务组大小。
进一步的,所述预处理模块,具体用于:
当所述各业务数据之间的关系存在依赖关系时,获取存在依赖关系的业务数据的类别数量,和各个类别的存在依赖关系的业务数据的数据行数;
若各个类别的数据行数全部都小于或等于所述分包大小,则所述分包大小不变;若存在至少一个类别的数据行数大于所述分包大小,则将最大的数据行数设定为所述分包大小;获取所述请求行数与当前的分包大小的比值,若所述比值为整数,则将所述比值作为所述线程数;若所述比值不为整数,则向上舍入数字取整数后作为所述线程数;
在得到所述线程数n后,获取排序队列中的第n个和第n+1个类别的数据行数,其中,各个类别的数据行数按照数值从大到小的顺序排列得到所述排序队列;将所述第n个和第n+1个类别的数据行数合并为一个任务组,并按照数值从大到小的顺序对所述排序队列重新进行排列,其中,任务组的数值为任务组中的数据行数之和;重复上述过程,直至队列中存在第1至第N任务组,其中,N等于所述线程数;
获取第1任务组中的数据行数最大的类别,和第N任务组中的数据行数最小的类别,并将二者进行互换,每次互换后按照数值从大到小的顺序对所述排序队列重新进行排列;
重复N-1次后,按照数值从大到小的顺序重新进行排列,并利用重复N-1次后的排列更新所述任务组大小。
本实施例在实际应用中,可以采取多个业务场景共享一个线程池,避免或缓解某几个实时或异步接口请求行多且请求量大时,用尽线程池的线程资源,致使其它接口超时或失败。通过为线程池中的每个线程相对公平的分配等量的任务,减少线程资源的等待,提升利用率。并且可以进一步的灵活控制使用线程资源每个场景,比如:核心业务可以多分线程,非核心或异步处理的业务少分线程。最终有效的控制了线程的使用量,又使得每个线程都能够均衡的处理有资源争抢的请求数据。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (8)
1.一种多线程环境下的数据处理方法,其特征在于,包括:
获取请求行数和分包大小,利用所述请求行数和所述分包大小确定线程数,其中,所述请求行数表示请求数据中的数据行的总数,所述分包大小表示每个线程处理请求行的最大数;
对所述请求数据进行分组,得到至少2个任务组;
根据所确定的线程数,为各任务组分配线程资源;
所述利用所述请求行数和所述分包大小确定线程数,包括:当各业务数据之间的关系为无相互依赖关系时,获取所述请求行数与所述分包大小的比值;若所述比值为整数,则将所述比值作为所述线程数;
所述利用所述请求行数和所述分包大小确定线程数,包括:当所述各业务数据之间的关系存在依赖关系时,获取存在依赖关系的业务数据的类别数量,和各个类别的存在依赖关系的业务数据的数据行数;若各个类别的数据行数全部都小于或等于所述分包大小,则所述分包大小不变;若存在至少一个类别的数据行数大于所述分包大小,则将最大的数据行数设定为所述分包大小;获取所述请求行数与当前的分包大小的比值,若所述比值为整数,则将所述比值作为所述线程数;若所述比值不为整数,则向上舍入数字取整数后作为所述线程数。
2.根据权利要求1所述的方法,其特征在于,还包括:
确定各业务数据之间的关系,所述各业务数据与所述请求数据关联;
其中,所述各业务数据之间的关系包括:所述各业务数据之间无相互依赖关系,或者,所述各业务数据之间为依赖关系。
3.根据权利要求2所述的方法,其特征在于,还包括:
若所确定的线程数大于最大处理的线程总数,则根据所述请求行数和所述最大处理的线程总数,更新任务组大小,其中,所述最大处理的线程总数表示一个请求允许开启的最大线程数。
4.根据权利要求1所述的方法,其特征在于,还包括:
若所述比值不为整数,则获取所述分包大小与所述比值的整数的乘积,并得到所述请求行数与所述乘积的差值;
根据所述差值,将多出的请求行数量依次分配至各个分包,并记录分配后的分包的最大值;
利用所述分包的最大值更新任务组大小。
5.根据权利要求1所述的方法,其特征在于,还包括:
在得到所述线程数n后,获取排序队列中的第n个和第n+1个类别的数据行数,其中,各个类别的数据行数按照数值从大到小的顺序排列得到所述排序队列;
将所述第n个和第n+1个类别的数据行数合并为一个任务组,并按照数值从大到小的顺序对所述排序队列重新进行排列,其中,任务组的数值为任务组中的数据行数之和;
重复上述过程,直至队列中存在第1至第N任务组,其中,N等于所述线程数。
6.根据权利要求5所述的方法,其特征在于,还包括:
获取第1任务组中的数据行数最大的类别,和第N任务组中的数据行数最小的类别,并将二者进行互换,每次互换后按照数值从大到小的顺序对所述排序队列重新进行排列;
重复N-1次后,按照数值从大到小的顺序重新进行排列,并利用重复N-1次后的排列更新任务组大小。
7.一种多线程环境下的数据处理装置,其特征在于,包括:
预处理模块,用于获取请求行数和分包大小,利用所述请求行数和所述分包大小确定线程数,其中,所述请求行数表示请求数据中的数据行的总数,所述分包大小表示每个线程处理请求行的最大数;
分组模块,用于对所述请求数据进行分组,得到至少2个任务组;
分配模块,用于根据所确定的线程数,为各任务组分配线程资源;
所述预处理模块,具体用于:当各业务数据之间的关系为无相互依赖关系时,获取所述请求行数与所述分包大小的比值;若所述比值为整数,则将所述比值作为所述线程数;若所述比值不为整数,则获取所述分包大小与所述比值的整数的乘积,并得到所述请求行数与所述乘积的差值;根据所述差值,将多出的请求行数量依次分配至各个分包,并记录分配后的分包的最大值;利用所述分包的最大值更新任务组大小;
所述预处理模块,具体用于:当所述各业务数据之间的关系存在依赖关系时,获取存在依赖关系的业务数据的类别数量,和各个类别的存在依赖关系的业务数据的数据行数;若各个类别的数据行数全部都小于或等于所述分包大小,则所述分包大小不变;若存在至少一个类别的数据行数大于所述分包大小,则将最大的数据行数设定为所述分包大小;获取所述请求行数与当前的分包大小的比值,若所述比值为整数,则将所述比值作为所述线程数;若所述比值不为整数,则向上舍入数字取整数后作为所述线程数;在得到所述线程数n后,获取排序队列中的第n个和第n+1个类别的数据行数,其中,各个类别的数据行数按照数值从大到小的顺序排列得到所述排序队列;将所述第n个和第n+1个类别的数据行数合并为一个任务组,并按照数值从大到小的顺序对所述排序队列重新进行排列,其中,任务组的数值为任务组中的数据行数之和;重复上述过程,直至队列中存在第1至第N任务组,其中,N等于所述线程数;获取第1任务组中的数据行数最大的类别,和第N任务组中的数据行数最小的类别,并将二者进行互换,每次互换后按照数值从大到小的顺序对所述排序队列重新进行排列;重复N-1次后,按照数值从大到小的顺序重新进行排列,并利用重复N-1次后的排列更新所述任务组大小。
8.根据权利要求7所述的装置,其特征在于,还包括:
分析模块,用于确定各业务数据之间的关系,所述各业务数据与所述请求数据关联,其中,所述各业务数据之间的关系包括:所述各业务数据之间无相互依赖关系,或者,所述各业务数据之间为依赖关系;
若所确定的线程数大于最大处理的线程总数,则根据所述请求行数和所述最大处理的线程总数,更新所述任务组大小,其中,所述最大处理的线程总数表示一个请求允许开启的最大线程数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910174014.8A CN110058940B (zh) | 2019-03-08 | 2019-03-08 | 一种多线程环境下的数据处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910174014.8A CN110058940B (zh) | 2019-03-08 | 2019-03-08 | 一种多线程环境下的数据处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110058940A CN110058940A (zh) | 2019-07-26 |
CN110058940B true CN110058940B (zh) | 2022-11-22 |
Family
ID=67316765
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910174014.8A Active CN110058940B (zh) | 2019-03-08 | 2019-03-08 | 一种多线程环境下的数据处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110058940B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111221635B (zh) * | 2019-11-22 | 2023-07-14 | 深圳前海微众银行股份有限公司 | 一种多进程交易流水处理方法及装置 |
CN111274038A (zh) * | 2020-01-22 | 2020-06-12 | 恩亿科(北京)数据科技有限公司 | 数据处理方法和装置、电子设备及计算机可读存储介质 |
CN112991095A (zh) * | 2020-06-16 | 2021-06-18 | 洪江川 | 一种人工智能和大数据的信息分析方法及云计算平台 |
CN113014624B (zh) * | 2021-02-08 | 2022-07-19 | 武汉虹信科技发展有限责任公司 | 设备数据配置方法和系统 |
CN115695334B (zh) * | 2022-10-11 | 2023-06-02 | 广州市玄武无线科技股份有限公司 | 一种多服务节点的线程分配控制方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101635744A (zh) * | 2009-08-26 | 2010-01-27 | 华为技术有限公司 | 一种数据传输方法及数据传输系统以及相关设备 |
CN106708620A (zh) * | 2015-11-13 | 2017-05-24 | 苏宁云商集团股份有限公司 | 一种处理数据的方法及系统 |
CN107402810A (zh) * | 2016-05-20 | 2017-11-28 | 阿里巴巴集团控股有限公司 | 线程分配方法及装置 |
CN108319458A (zh) * | 2018-01-17 | 2018-07-24 | 南京航空航天大学 | 一种基于图形化卫式命令演算的多任务编译方法 |
-
2019
- 2019-03-08 CN CN201910174014.8A patent/CN110058940B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101635744A (zh) * | 2009-08-26 | 2010-01-27 | 华为技术有限公司 | 一种数据传输方法及数据传输系统以及相关设备 |
CN106708620A (zh) * | 2015-11-13 | 2017-05-24 | 苏宁云商集团股份有限公司 | 一种处理数据的方法及系统 |
CN107402810A (zh) * | 2016-05-20 | 2017-11-28 | 阿里巴巴集团控股有限公司 | 线程分配方法及装置 |
CN108319458A (zh) * | 2018-01-17 | 2018-07-24 | 南京航空航天大学 | 一种基于图形化卫式命令演算的多任务编译方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110058940A (zh) | 2019-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110058940B (zh) | 一种多线程环境下的数据处理方法及装置 | |
US7680848B2 (en) | Reliable and scalable multi-tenant asynchronous processing | |
KR101959153B1 (ko) | 데이터베이스에서의 계좌와 관련된 거래 요청의 효율적인 처리를 위한 시스템 | |
EP3370391B1 (en) | System for data cleansing based aggregation and prioritization of it asset field values from real-time event logs and method thereof | |
WO2018187229A1 (en) | Database management system using hybrid indexing list and hierarchical query processing architecture | |
CN111913955A (zh) | 数据的排序处理装置、方法和存储介质 | |
US10002019B2 (en) | System and method for assigning a transaction to a serialized execution group based on an execution group limit for parallel processing with other execution groups | |
CN110383764A (zh) | 无服务器系统中使用历史数据处理事件的系统和方法 | |
CN110599148B (zh) | 集群数据处理方法、装置、计算机集群及可读存储介质 | |
US20140059000A1 (en) | Computer system and parallel distributed processing method | |
CN109218385B (zh) | 处理数据的方法和装置 | |
US6549931B1 (en) | Distributing workload between resources used to access data | |
CN109189578A (zh) | 存储服务器分配方法、装置、管理服务器以及存储系统 | |
CN105683941A (zh) | 调节企业数据仓库资源使用 | |
CN110083536B (zh) | 测试资源分配方法及装置、电子设备及存储介质 | |
CN110309229A (zh) | 分布式系统的数据处理方法和分布式系统 | |
CN111913784B (zh) | 任务调度方法及装置、网元、存储介质 | |
CN112783644A (zh) | 一种基于高频键值计数的分布式倾斜流处理方法和系统 | |
JP5043166B2 (ja) | 計算機システム、データ検索方法及びデータベース管理計算機 | |
CN111625414A (zh) | 一种数据转换整合软件的自动调度监控系统实现方法 | |
CN108664322A (zh) | 数据处理方法及系统 | |
US20150189013A1 (en) | Adaptive and prioritized replication scheduling in storage clusters | |
CN107911484A (zh) | 一种消息处理的方法及装置 | |
US9503353B1 (en) | Dynamic cross protocol tuner | |
CN113111083A (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 |