数据处理方法及装置与流程

文档序号:12120206阅读:226来源:国知局
数据处理方法及装置与流程

本发明实施例涉及计算机技术领域,特别涉及一种数据处理方法及装置。



背景技术:

线程是程序中的最小单元,是程序中一个单一的顺序控制流程。在单个程序中同时运行两个或多个线程来完成不同的数据处理,这种数据处理方式称为多线程处理。

目前,在多线程处理中,当处理器接收到大量的待处理的数据时,将待处理的数据按照固定数量进行拆分,得到至少一组数据;根据待处理的数据创建多个线程,再将多个线程进行分配,使多个线程与每组数据对应,最后,通过处于运行状态的线程对待处理的数据进行处理。

然而,在多线程处理中创建线程的数量过多时,非常容易将多个线程分配到用于处理同一组数据,造成多个线程都需要访问同一个资源,从而使得线程死锁,也就是会产生由于竞争资源而造成线程间的互相等待,导致无法继续运行的现象,这将会造成计算资源的浪费,给系统带来较大的安全隐患。



技术实现要素:

为了解决多线程处理中创建的线程数量过多导致线程死锁的问题,本发明实施例提供了一种数据处理方法及装置。所述技术方案如下:

第一方面,提供了一种数据处理方法,所述方法包括:

接收待处理的数据;

根据所述待处理的数据在单一线程池中创建分配线程,所述单一线程池中最多有一个处于运行状态的所述分配线程,每个所述分配线程与第一数量n1的数据对应;

通过所述处于运行状态的所述分配线程在最大运行线程池中创建m1个处理线程,所述分配线程对应的第一数量n1的数据均匀分配给创建的m1个所述处理线程进行处理;

在所述最大运行线程池中通过处于运行状态的所述处理线程对所述数据进行处理,所述最大运行线程池中最多有m2个处于运行状态的所述处理线程。

第二方面,提供了一种数据处理装置,所述装置包括:

接收模块,用于接收待处理的数据;

第一创建模块,用于根据所述待处理的数据在单一线程池中创建分配线程,所述单一线程池中最多有一个处于运行状态的所述分配线程,每个所述分配线程与第一数量n1的数据对应;

第二创建模块,用于通过所述处于运行状态的所述分配线程在最大运行线程池中创建m1个处理线程,所述分配线程对应的第一数量n1的数据均匀分配给创建的m1个所述处理线程进行处理;

处理模块,用于在所述最大运行线程池中通过处于运行状态的所述处理线程对所述数据进行处理,所述最大运行线程池中最多有m2个处于运行状态的所述处理线程。

本发明实施例提供的技术方案至少具有如下有益效果:

通过根据待处理的数据在单一线程池中创建分配线程,每个所述分配线程与第一数量n1的数据对应,通过处于运行状态的分配线程在最大运行线程池中创建m1个处理线程,分配线程对应的第一数量n1的数据均匀分配给创建的m1个处理线程进行处理;由于单一线程池中最多有一个处于运行状态的分配线程,通过分配线程A创建的m1个处理线程用于处理数据组a中的数据,通过分配线程B创建的m1个处理线程用于处理数据组b中的数据,数据组a中的数据与数据组b中的数据没有重叠,从而保证了通过不同的分配线程创建的处理线程所处理的数据没有重叠,避免了多个处理线程需要访问同一个资源的情况,解决了线程死锁的问题;达到了合理利用计算资源,稳定地使用多处理线程机制来快速处理数据,从而提高系统的计算性能的效果。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一个实施例提供的数据处理方法的流程图;

图2是本发明另一个实施例提供的数据处理方法的流程图;

图3是本发明另一个实施例提供的数据处理方法的原理示意图;

图4是本发明另一个实施例提供的数据处理装置的结构示意图;

图5是本发明另一个实施例提供的数据处理装置的结构示意图;

图6是本发明一个实施例提供的服务器的结构框架图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

请参考图1,其示出了本发明一个实施例提供的数据处理方法的流程图。该数据处理方法可以应用于具有多线程处理能力的服务器中,该服务器中包括有处理器和存储器。该数据处理方法包括:

步骤102,接收待处理的数据。

可选的,处理器接收待处理的数据。可选地,该数据是流式数据,比如气象观测站在不同时间、不同地点所观测得到的气象数据。该数据按照不同时间和不同地点划分为多个数据。

步骤104,根据待处理的数据在单一线程池中创建分配线程,单一线程池中最多有一个处于运行状态的分配线程,每个分配线程与第一数量n1的数据对应。

可选的,第一数量n1是根据处理器处理数据时的计算能力所预先设置好的数值,第一数量n1个数据作为一组,将待处理数据中拆分成多组数据,其中每组数据中至少两个数据,及n1为大于等于2的自然数,待处理的数据可以是n1的整数倍,也可以不是n1的整数倍。当待处理的数据不是n1的整数倍时,将待处理的数据的数量与n1相除得到余数x,为最后剩余的x个数据单独创建一个分配线程。

可选的,处理器根据待处理的数据在单一线程池中创建分配线程,创建后的分配线程都处于排队状态,单一线程池中最多有一个处于运行状态的分配线程。具体来讲,处理器实时判断单一线程池中是否有处于运行状态的分配线程,如果没有,则将单一线程池中处于排队状态且创建时间最早的一个分配线程切换为运行状态;如果有,则不进行切换步骤。

步骤106,通过处于运行状态的分配线程在最大运行线程池中创建m1个处理线程,分配线程对应的第一数量n1的数据均匀分配给创建的m1个处理线程进行处理。

可选的,每个处理线程用于对第二数量n2的数据进行处理,n2的值等于n1除以m1的商值,即n2=n1/m1,n1≥2。

可选的,在同一时间内处理器通过唯一处于运行状态的分配线程在最大运行线程池中创建m1个处理线程。具体来讲,每当处理器将分配线程切换为运行状态时,都需要重新执行通过处于运行状态的分配线程在最大运行线程池中创建m1个处理线程的步骤。可选的,m1是预设值。

可选的,每个处理线程用于对第二数量n2的数据进行处理,第二数量n2是根据第一数量n1和创建的m1个处理线程计算得到的。示意性的,n2=n1/m1。

步骤108,在最大运行线程池中通过处于运行状态的处理线程对数据进行处理,最大运行线程池中最多有m2个处于运行状态的处理线程。

可选的,处理器在最大运行线程池中通过处于运行状态的处理线程对数据进行处理。

综上所述,通过根据待处理的数据在单一线程池中创建分配线程,每个所述分配线程与第一数量n1的数据对应,通过处于运行状态的分配线程在最大运行线程池中创建m1个处理线程,分配线程对应的第一数量n1的数据均匀分配给创建的m1个处理线程进行处理;由于单一线程池中最多有一个处于运行状态的分配线程,通过分配线程A创建的m1个处理线程用于处理数据组a中的数据,通过分配线程B创建的m1个处理线程用于处理数据组b中的数据,数据组a中的数据与数据组b中的数据没有重叠,从而保证了通过不同的分配线程创建的处理线程所处理的数据没有重叠,避免了多个处理线程需要访问同一个资源的情况,解决了线程死锁的问题;达到了合理利用计算资源,稳定地使用多处理线程机制来快速处理数据,从而提高系统的计算性能的效果。

请参考图2,其示出了本发明另一个实施例提供的数据处理方法的流程图。该数据处理方法可以应用于具有多线程处理能力的服务器中,该服务器中包括有处理器和存储器。该数据处理方法包括:

步骤201,接收待处理的数据。

可选的,处理器接收待处理的数据,示意性的,待处理的数据为20000个数据。

步骤202,将待处理的数据按照第一数量n1个数据为一组进行拆分,得到至少一组数据。

可选的,第一数量n1是根据处理器处理数据时的计算能力所预先设置好的数值。

示意性的,待处理的数据为20000个数据,第一数量n1设置为2000,则处理器将20000个数据按照2000进行拆分,得到10组数据。

步骤203,在单一线程池中创建与每一组数据对应的分配线程。

其中,单一线程池中最多有一个处于运行状态的分配线程,每个分配线程与第一数量n1的数据对应。

示意性的,处理器在单一线程池中创建与每一组数据对应的分配线程,创建的分配线程有10个,每个分配线程与2000个数据相对应。

步骤204,处理器通过处于运行状态的分配线程在最大运行线程池中创建m1个处理线程,分配线程对应的第一数量n1的数据均匀分配给创建的m1个处理线程进行处理;

可选的,每个处理线程用于对第二数量n2的数据进行处理,n2的值等于n1除以m1的商值,即n2=n1/m1,n1≥2。

可选的,处理线程的个数m1是根据处理器处理数据时的计算能力所预先设置好的数值;示意性的,m1为4,则第二数量n2=2000/4=500,每个处理线程用于对500个数据进行处理。

可选的,通过处于运行状态的分配线程在最大运行线程池中创建4个处理线程。

步骤205,检测最大运行线程中处于运行状态的处理线程的个数m3与最大运行阈值m2之间的关系。

可选的,处理器检测最大运行线程中处于运行状态的处理线程的个数m3与最大运行阈值m2之间的关系。

步骤206,若m3=m2,则将m1个处理线程设置为排队状态。

可选的,最大运行线程池中最多有m2个处于运行状态的处理线程,m2是根据处理器处理数据时的计算能力所预先设置好的数值;示意性的,m2为100。

可选的,若m3=100,则处理器将4个处理线程设置为排队状态。

步骤207,若m2-m1<m3<m2,则将m1个处理线程中创建时间较早的m2-m3个处理线程设置为运行状态,将m1个处理线程中的剩余的m1-(m2-m3)个处理线程设置为排队状态。

可选的,若m3=98,满足96<m3<100的条件,则处理器将4个处理线程中创建时间较早的2个处理线程设置为运行状态,将4个处理线程中的剩余的2个处理线程设置为排队状态。

步骤208,若m3≤m2-m1,则将m1个处理线程设置为运行状态。

可选的,若m3=90,满足m3≤96的条件,则处理器将4个处理线程设置为运行状态。

步骤209,检测最大运行线程中处于排队状态的处理线程的个数m4是否达到预定阈值m5。

可选的,处理器检测最大运行线程中处于排队状态的处理线程的个数m4是否达到预定阈值m5,预定阈值m5是根据处理器的内存容量所预先设置的数值;示意性的,m5=200。

步骤210,若处于排队状态的处理线程的个数m4达到预定阈值m5,则暂停单一线程池中的处于运行状态的分配线程。

可选的,若处于排队状态的处理线程的个数m4未达到200,则处理器继续运行单一线程池中的处于运行状态的分配线程;若处于排队状态的处理线程的个数m4达到200,则处理器暂停单一线程池中的处于运行状态的分配线程。

步骤211,处理器在最大运行线程池中通过处于运行状态的处理线程对数据进行处理,最大运行线程池中最多有m2个处于运行状态的处理线程。

综上所述,通过根据待处理的数据在单一线程池中创建分配线程,每个所述分配线程与第一数量n1的数据对应,通过处于运行状态的分配线程在最大运行线程池中创建m1个处理线程,分配线程对应的第一数量n1的数据均匀分配给创建的m1个处理线程进行处理;由于单一线程池中最多有一个处于运行状态的分配线程,通过分配线程A创建的m1个处理线程用于处理数据组a中的数据,通过分配线程B创建的m1个处理线程用于处理数据组b中的数据,数据组a中的数据与数据组b中的数据没有重叠,从而保证了通过不同的分配线程创建的处理线程所处理的数据没有重叠,避免了多个处理线程需要访问同一个资源的情况,解决了线程死锁的问题;达到了合理利用计算资源,稳定地使用多处理线程机制来快速处理数据,从而提高系统的计算性能的效果。

还通过检测最大运行线程中处于运行状态的处理线程的个数m3,若m3=m2,则将m1个处理线程设置为排队状态;由于最大运行线程池中最多有m2个处于运行状态的所述处理线程,避免了线程数量过多造成的处理器压力的问题;达到了当多线程处理中的线程数量过多时,提高处理器的运行效率的效果。

本申请中涉及的n1、n2、m1、m2均为自然数,可选的,以待处理的数据为20000个数据为例,请参考图3,其示出了本发明另一个实施例提供的数据处理方法的原理示意图。第一数量n1设置为2000,则处理器将20000个数据按照2000个为一组进行拆分,得到10组数据。根据10组数据,处理器在单一线程池中创建与这10组数据对应的10个分配线程,分别为分配线程A、分配线程B、分配线程C、分配线程D、分配线程E、分配线程F、分配线程G、分配线程H、分配线程I和分配线程J。处理器将处理线程的个数m1设置为4,,第二数量n2=2000/4=500,则通过处于运行状态的分配线程A在最大运行线程池中创建4个处理线程,分别为处理线程A1、处理线程A2、处理线程A3和处理线程A4,每个处理线程用于对500个数据进行处理。处理器检测到最大运行线程中处于运行状态的处理线程的个数m3为98,则将4个处理线程中创建时间较早的2个处理线程,即处理线程A1和处理线程A2设置为运行状态,将4个处理线程中的剩余的2个处理线程,即处理线程A3和处理线程A4设置为排队状态。处理器检测最大运行线程中处于排队状态的处理线程的个数为2,没有达到预定阈值200,则处理器继续运行单一线程池中的处于运行状态的分配线程。处理器在最大运行线程池中通过处于运行状态的处理线程对数据进行处理。

请参考图4,其示出了本发明一个实施例提供的数据处理装置的结构示意图。该装置包括:

接收模块401,用于接收待处理的数据;

第一创建模块402,用于根据待处理的数据在单一线程池中创建分配线程,单一线程池中最多有一个处于运行状态的分配线程,每个分配线程与第一数量n1的数据对应;

第二创建模块403,用于通过处于运行状态的分配线程在最大运行线程池中创建m1个处理线程分配线程对应的第一数量n1的数据均匀分配给创建的m1个处理线程进行处理;

处理模块404,用于在最大运行线程池中通过处于运行状态的处理线程对数据进行处理,最大运行线程池中最多有m2个处于运行状态的处理线程。

综上所述,通过根据待处理的数据在单一线程池中创建分配线程,每个所述分配线程与第一数量n1的数据对应,通过处于运行状态的分配线程在最大运行线程池中创建m1个处理线程,分配线程对应的第一数量n1的数据均匀分配给创建的m1个处理线程进行处理;由于单一线程池中最多有一个处于运行状态的分配线程,通过分配线程A创建的m1个处理线程用于处理数据组a中的数据,通过分配线程B创建的m1个处理线程用于处理数据组b中的数据,数据组a中的数据与数据组b中的数据没有重叠,从而保证了通过不同的分配线程创建的处理线程所处理的数据没有重叠,避免了多个处理线程需要访问同一个资源的情况,解决了线程死锁的问题;达到了合理利用计算资源,稳定地使用多处理线程机制来快速处理数据,从而提高系统的计算性能的效果。

请参考图5,其示出了本发明另一个实施例提供的数据处理装置的结构示意图。该装置包括:

第一创建模块402,包括:

拆分单元402a和创建单元402b;

拆分单元402a,用于将待处理的数据按照第一数量n1个数据为一组进行拆分,得到至少一组数据;

创建单元402b,用于在单一线程池中创建与每一组数据对应的分配线程。

该装置,还包括:

切换模块405,用于将单一线程池中处于排队状态且创建时间最早的一个分配线程切换为运行状态。

该装置,还包括:

第一检测模块406、第一设置模块407、第二设置模块408和第三设置模块409;

第一检测模块406,用于检测最大运行线程中处于运行状态的处理线程的个数m3与m2之间的关系;

第一设置模块407,用于若m3=m2,则将m1个处理线程设置为排队状态;

第二设置模块408,用于若m2-m1<m3<m2,则将m1个处理线程中创建时间较早的m2-m3个处理线程设置为运行状态,将m1个处理线程中的剩余的m1-(m2-m3)个处理线程设置为排队状态;

第三设置模块409,用于若m3≤m2-m1,则将m1个处理线程设置为运行状态。

该装置,还包括:

第二检测模块410和暂停模块411;

第二检测模块410,用于检测最大运行线程中处于排队状态的处理线程的个数m4是否达到预定阈值m5;

暂停模块411,用于若处于排队状态的处理线程的个数m4达到预定阈值m5,则暂停单一线程池中的处于运行状态的分配线程。

综上所述,通过根据待处理的数据在单一线程池中创建分配线程,每个所述分配线程与第一数量n1的数据对应,通过处于运行状态的分配线程在最大运行线程池中创建m1个处理线程,分配线程对应的第一数量n1的数据均匀分配给创建的m1个处理线程进行处理;由于单一线程池中最多有一个处于运行状态的分配线程,通过分配线程A创建的m1个处理线程用于处理数据组a中的数据,通过分配线程B创建的m1个处理线程用于处理数据组b中的数据,数据组a中的数据与数据组b中的数据没有重叠,从而保证了通过不同的分配线程创建的处理线程所处理的数据没有重叠,避免了多个处理线程需要访问同一个资源的情况,解决了线程死锁的问题;达到了合理利用计算资源,稳定地使用多处理线程机制来快速处理数据,从而提高系统的计算性能的效果。

还通过检测最大运行线程中处于运行状态的处理线程的个数m3,若m3=m2,则将m1个处理线程设置为排队状态;由于最大运行线程池中最多有m2个处于运行状态的所述处理线程,避免了线程数量过多造成的处理器压力的问题;达到了当多线程处理中的线程数量过多时,提高处理器的运行效率的效果。

请参考图6,其示出了本发明一个实施例提供的服务器的结构框架图。所述服务器600包括中央处理单元(CPU)601、包括随机存取存储器(RAM)602和只读存储器(ROM)603的系统存储器604,以及连接系统存储器604和中央处理单元601的系统总线605。所述服务器600还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统)606,和用于存储操作系统613、应用程序614和其他程序模块615的大容量存储设备607。

所述基本输入/输出系统606包括有用于显示信息的显示器608和用于用户输入信息的诸如鼠标、键盘之类的输入设备609。其中所述显示器608和输入设备609都通过连接到系统总线605的输入输出控制器610连接到中央处理单元601。所述基本输入/输出系统606还可以包括输入输出控制器610以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器610还提供输出到显示屏、打印机或其他类型的输出设备。

所述大容量存储设备607通过连接到系统总线605的大容量存储控制器(未示出)连接到中央处理单元601。所述大容量存储设备607及其相关联的计算机可读介质为服务器600提供非易失性存储。也就是说,所述大容量存储设备607可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。

不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器604和大容量存储设备607可以统称为存储器。

根据本发明的各种实施例,所述服务器600还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器600可以通过连接在所述系统总线605上的网络接口单元611连接到网络612,或者说,也可以使用网络接口单元611来连接到其他类型的网络或远程计算机系统(未示出)。

所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,所述一个或者一个以上程序包含用于进行本发明实施例提供的数据处理方法。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

本领域普通技术人员可以理解实现上述实施例的数据处理方法中全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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