CN107818012B - 一种数据处理方法、装置及电子设备 - Google Patents
一种数据处理方法、装置及电子设备 Download PDFInfo
- Publication number
- CN107818012B CN107818012B CN201610818710.4A CN201610818710A CN107818012B CN 107818012 B CN107818012 B CN 107818012B CN 201610818710 A CN201610818710 A CN 201610818710A CN 107818012 B CN107818012 B CN 107818012B
- Authority
- CN
- China
- Prior art keywords
- task
- data
- data reading
- partition
- reading
- 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
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5021—Priority
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供一种数据处理方法、装置及电子设备,所述数据处理方法包括:将分区产生的数据读取任务放入任务队列中;当线程池中的读取线程个数未达到预定上限时,从所述任务队列中提取数据读取任务,根据提取的任务建立读取线程放入所述线程池;其中,所述线程池用于存放轮流占用处理资源的读取线程。本申请在分区较多,以及分区吞吐差异较大的情况下,可以提高分区数据的读取效率。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种数据处理方法、装置及电子设备。
背景技术
目前云计算大数据模块比较通用的数据源(或者说是数据中转)一般是依赖Kafka(或者与Kafka类似的产品,比如MetaQ或者Loghub)实现。Kafka是一种高吞吐量的分布式发布订阅消息***,消息的发布(publish)称作生产者(producer),消息的订阅(subscribe)称作消费者(consumer)。MetaQ是一个高性能、高可用、可扩展的分布式消息中间件。LogHub是一个日志产品的一种服务,提供类似于Kafka的业务功能。
此类数据源有两个特点,一是分为多个分区,二是每个分区只能被一个线程消费,该线程通常为读取线程;在这两个特点下,可以支持更高效的吞吐量。其中,分区是Kafka以及类似的产品做分布式处理的基础单位,具有以下特性:一个分区保持数据的先进先出的逻辑;一个分区只能有一个线程消费;每一个数据都有一个偏移量(Cursor/offset)记录;每一次读取都是在返回数据的基础上,还返回当前读到什么位置的信息。
在大数据处理的场景下,Kafka的业务比较多,分区(Shard/Partition)也会比较多。在不同业务产生的数据量不一样的前提下,每一个分区产生数据的频率和容量都有所差异。这种情况下,需要在合理的资源下完成海量数据的处理就必须小心翼翼,否则会浪费大量的资源和背景。
每个分区会分别产生对应本分区的数据读取任务,每个数据读取任务对应一个读取线程,该读取线程在被CPU执行时将用于读取对应分区的数据。对于多个分区的数据读取,相关技术包括以下三种模式。
模式一、多线程独立不间隔处理的模式。
如图1所示,该模式下,多个读取线程争抢有限的CPU资源,每个读取线程都会进行一个循环的无终止的读取尝试。该模式包括以下三个特点:
1、每个读取线程每时每刻都尝试着读取,无论能否读到。
2、极端情况下当某个读取线程一直无法读到可用的数据,则相当于一个死循环,至少消耗掉一个CPU的所有用户使用(user)的时间。
3、一个分区如果比较平均的发生少量数据,也会导致相应的读取线程每次读取少量数据,但是读取次数比较多。
上述三个特点都会导致负责数据读取的服务器以及Kafka的服务器始终处于一个高压的状态,浪费了处理资源,同时降低了数据吞吐量。这种情况下用户消耗的数据处理服务器要远比理论需要的服务器要多得多。
模式二、增加Sleep的循环读取的模式。
如图2所示,该模式下,多线程读取的问题一般优化成一个队列。主线程将会有一定的Sleep动作,释放CPU的占用。该模式下,每隔一段时间循环执行所有的读取线程,两次循环执行之间暂停一段时间。
该模式下,部分数据量比较小的分区,如果每次循环执行时都分配给该分区对应的读取线程CPU时间,由于没有那么多数据需要读取,将会造成CPU资源的浪费,而一些数据量比较大的分区,则因为分配不到足够的CPU时间而导致数据读不完,产生堆积。
模式三、多线程下的Sleep,释放CPU资源的模式。
该模式综合上面两个模式,多个读取线程争抢有限的CPU资源,且每一个读取线程具有固定的Sleep周期,如图3所示。
该模式当读取线程过多时,会导致CPU抢占严重;另外CPU切换到另一个线程需要进行上下文切换,即:保存当前线程的运行环境并恢复将要切换到的线程的运行环境,因此当读取线程太多时,CPU进行上下文切换的频率很高,大量计算资源都会在CPU的上下文切换中消耗掉。
发明内容
本申请提供一种数据处理方法、装置及电子设备,在分区较多,以及分区吞吐差异较大的情况下,可以提高分区数据的读取效率。
本申请采用如下技术方案。
一种数据处理方法,包括:
将分区产生的数据读取任务放入任务队列中;
当线程池中的读取线程个数未达到预定上限时,从所述任务队列中提取数据读取任务,根据提取的任务建立读取线程放入所述线程池;其中,所述线程池用于存放轮流占用处理资源的读取线程。
可选地,所述将分区产生的数据读取任务放入任务队列中包括:
为分区产生的数据读取任务生成时间戳,所述时间戳用于指示开始执行该数据读取任务的时刻;将携带时间戳的所述数据读取任务放入所述任务队列;
所述从任务队列中提取数据读取任务包括:
从所述任务队列中提取时间戳所指示的时刻先于或等于提取时刻的数据读取任务。
可选地,所述为分区产生的数据读取任务生成时间戳包括:
对于分区产生的数据读取任务,用当前时刻加上所确定的延时长度得到预计执行时刻,用表示预计执行时刻的信息作为该数据读取任务的时间戳;所述延时长度根据所述分区的上一个数据读取任务所读取的数据量确定;数据量越大则延时长度越短。
可选地,所述延时长度根据所述分区的上一个数据读取任务所读取的数据量确定包括:
根据所述分区的上一个数据读取任务所读取的数据量所属的区间,以及预设的延时长度和数据量的区间之间的对应关系,确定所述延时长度。
可选地,所述任务队列中,数据读取任务按照所携带的时间戳所指示的时刻,从先到后进行排序;
所述将分区产生的数据读取任务放入任务队列中还包括:
按照数据读取任务所携带的时间戳所指示的时刻,将所述数据读取任务放入任务队列中的相应位置。
可选地,所述任务队列是优先队列,数据读取任务携带的时间戳作为该数据读取任务的优先级;时间戳所指示的时刻越靠前则优先级越高。
可选地,所述线程池中线程个数的预定上限是用于执行所述线程池中读取线程的CPU个数的两倍。
可选地,所述的数据处理方法还包括:
轮流执行所述线程池中的读取线程。
一种数据处理装置,包括:
队列管理模块,用于将分区产生的数据读取任务放入任务队列中;
提取模块,用于当线程池中的读取线程个数未达到预定上限时,从所述任务队列中提取数据读取任务,根据提取的任务建立读取线程放入所述线程池;其中,所述线程池用于存放轮流占用处理资源的读取线程。
可选地,所述队列管理模块将分区产生的数据读取任务放入任务队列中包括:
所述队列管理模块为分区产生的数据读取任务生成时间戳,所述时间戳用于指示开始执行该数据读取任务的时刻;将携带时间戳的所述数据读取任务放入所述任务队列;
所述提取模块从任务队列中提取数据读取任务包括:
所述提取模块从所述任务队列中提取时间戳所指示的时刻先于或等于提取时刻的数据读取任务。
可选地,所述队列管理模块为分区产生的数据读取任务生成时间戳包括:
所述队列管理模块对于分区产生的数据读取任务,用当前时刻加上所确定的延时长度得到预计执行时刻,用表示预计执行时刻的信息作为该数据读取任务的时间戳;所述延时长度根据该分区的上一个数据读取任务所读取的数据量确定;数据量越大则延时长度越短。
可选地,所述延时长度根据所述分区的上一个数据读取任务所读取的数据量确定包括:
根据所述分区的上一个数据读取任务所读取的数据量所属的区间,以及预设的延时长度和数据量的区间之间的对应关系,确定所述延时长度。
可选地,所述任务队列中,数据读取任务按照所携带的时间戳所指示的时刻,从先到后进行排序;
所述队列管理模块将分区产生的数据读取任务放入任务队列中还包括:
所述队列管理模块按照数据读取任务所携带的时间戳所指示的时刻,将所述数据读取任务放入任务队列中的相应位置。
可选地,所述任务队列是优先队列,数据读取任务携带的时间戳作为该数据读取任务的优先级;时间戳所指示的时刻越靠前则优先级越高。
可选地,所述线程池中线程个数的预定上限是用于执行所述线程池中读取线程的CPU个数的两倍。
可选地,所述的数据处理装置还包括:
读取模块,用于轮流执行所述线程池中的读取线程。
一种用于进行数据处理的电子设备,包括:存储器和处理器;
所述存储器用于保存用于进行数据处理的程序;所述用于进行数据处理的程序在被所述处理器读取执行时,执行以下操作:
将分区产生的数据读取任务放入任务队列中;
当线程池中的读取线程个数未达到预定上限时,从所述任务队列中提取数据读取任务,根据提取的任务建立读取线程放入所述线程池;其中,所述线程池用于存放轮流占用处理资源的读取线程。
本申请包括以下优点:
本申请至少一个实施例中,在分区较多,以及分区吞吐差异较大的情况下,可以高效地读取分区产生的数据,合理利用CPU资源。该实施例一方面通过任务队列控制抢占CPU资源的线程的数量,因此不是每个分区的数据读取任务都可以占用CPU资源,只有当根据读取任务建立线程并放入线程池中以后,该数据读取任务才能占用CPU资源。线程池中线程的数目小于分区的数目,因此不会发生大规模的CPU抢占冲突,CPU的上下文切换频率也会降低,从而可以减少CPU在上下文切换中所花费的资源,提高了处理效率。另一方面,由于轮流占用CPU的线程减少,因此CPU分给每个线程的时间可以较长,从而能使CPU每次从分区中读取更多的数据。而且通过从任务队列中提取数据读取任务来补充线程池中的线程,可以保证尽量的使用CPU资源而不会浪费。
本申请实施例的一种实现方式中,在任务队列中的数据读取任务里增加时间戳,从任务队列中提取数据读取任务时根据时间戳进行提取,这样可以通过调整数据读取任务的时间戳,保证任务按照业务紧迫程度来调用线程池使用。可选地,一个分区产生的数据读取任务的时间戳根据上一次从该分区读取的数据量确定,这样可以实现对消费数据(即读取的数据量)的智能学习,自适应调整尝试周期,也就是根据该分区的数据读取任务建立线程放入线程池的周期。可选地,按照时间戳所指示的时刻的先后,在任务队列中对数据读取任务进行排序,这样在从任务队列中提取数据读取任务时,可以不用对任务队列中所有数据读取任务的时间戳进行检查。
当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有优点。
附图说明
图1是相关技术中多线程独立不间隔处理的模式的示意图;
图2是相关技术中增加Sleep的循环读取的模式的示意图;
图3是相关技术中多线程下的Sleep,释放CPU资源的模式的示意图;
图4是实施例一的数据处理方法的流程图;
图5是实施例一的例子的实现示意图;
图6是实施例一的例子中提取任务的示意图;
图7实施例一的例子中将任务加入队列的示意图;
图8是实施例二的数据处理装置的示意图。
具体实施方式
下面将结合附图及实施例对本申请的技术方案进行更详细的说明。
需要说明的是,如果不冲突,本申请实施例以及实施例中的各个特征可以相互结合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在一种配置方式中,用于数据处理的计算设备可包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存(memory)。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。内存可能包括模块1,模块2,……,模块N(N为大于2的整数)。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体存储介质,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM),快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
实施例一、一种数据处理方法,如图4所示,包括步骤S110~S120:
S110、将分区产生的数据读取任务放入任务队列中;
S120、当线程池中的读取线程个数未达到预定上限时,从所述任务队列中提取数据读取任务,根据提取的任务建立读取线程放入所述线程池;其中,所述线程池用于存放轮流占用处理资源的读取线程。
本实施例中,在分区较多,以及分区吞吐差异较大的情况下,可以高效地读取分区产生的数据,合理利用CPU资源。该实施例一方面通过任务队列控制抢占CPU资源的线程的数量,因此不是每个分区的数据读取任务都可以占用CPU资源,只有当根据读取任务建立线程并放入线程池中以后,该数据读取任务才能占用CPU资源。在大数据处理场景下,分区的数目非常大,线程池中线程的数目必然小于分区的数目,因此不会发生大规模的CPU抢占冲突,CPU的上下文切换频率也会降低,从而可以减少CPU在上下文切换中所花费的资源,提高了处理效率。另一方面,由于轮流占用CPU的线程减少,因此CPU分给每个线程的时间可以较长,从而能使CPU每次从分区中读取更多的数据。而且通过从任务队列中提取数据读取任务来补充线程池中的线程,可以保证尽量的使用CPU资源而不会浪费。
本实施例中,线程池是一种多线程处理形式,线程池中的读取线程可以都是后台线程。每个读取线程可以都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个读取线程在托管代码中空闲(如正在等待某个事件),则线程池将***另一个辅助线程来使所有处理器保持繁忙。如果线程池中所有的读取线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程,但读取线程的数目永远不会超过预定上限。超过预定上限的读取线程可以排队,等到线程池中的其它读取线程完成后才启动。
本实施例中,线程池中的读取线程可以通过抢占、轮询等方式轮流占用处理资源;比如可以为不同的读取线程分配时间片,读取线程在所分配的时间片中可以占用处理资源。
本实施例中,线程池中的读取线程所轮流占用的处理资源,可以是指用于执行线程池中的读取线程的CPU资源。
本实施例中,各分区会分别产生数据读取任务;由于一个分区只能被线程消费,因此在一个分区的数据读取任务未完成之前,不会产生新的数据读取任务。一个分区产生的数据读取任务先被放入任务队列,被提取出来后会相应建立读取线程,放入所述线程池;该读取线程将针对相应分区进行数据读取。比如假设是根据分区A的数据读取任务建立的读取线程,则会对分区A的数据进行读取;该读取线程执行完成后,分区A的数据读取任务完成;如果分区A还需要再进行数据读取,则产生新的数据读取任务,放入任务队列。
一种实现方式中,可以由用于对各分区的数据进行读取的计算设备(可以但不限于是服务器)执行上述数据处理方法,由该计算设备分配一部分处理资源来执行上述步骤S110~S120,这部分处理资源可以看成一个中控***;其余的处理资源全部或部分用于执行所述线程池中的读取线程。
一种实现方式中,可以除了用于对各分区的数据进行读取的计算设备之外,还存在另一个独立的计算设备执行上述上述步骤S110~S120,为用于对各分区的数据进行读取的计算设备维护线程池,由用于对各分区的数据进行读取的计算设备执行所述线程池中的读取线程。
一种实现方式中,可以周期性从任务队列中提取数据读取任务;提取后可以当线程池中的读取线程个数不足(即未达到预定上限)时,将提取的数据读取任务转换为读取线程放入线程池,即启动已建立的读取线程。
一种实现方式中,也可以是当线程池中的读取线程个数不足时,才从任务队列中提取数据读取任务,并建立读取线程放入线程池。或者可以:平时周期性提取任务,如果未到达提取周期时线程池中读取线程个数已不足,则即时进行提取。
一种实现方式中,线程池中线程个数的预定上限可以是用于执行所述线程池中线程的CPU个数的两倍。
比如有4个CPU用于执行所述线程池中的读取线程,则线程池中线程个数的预定上限为8,即最多可以有8个读取线程。
其它实现方式中,线程池中线程个数的预定上限也可以设计为其它大小,可以根据经验值或实验确定。通常,该预定上限小于所要读取数据的分区的数目。
一种实现方式中,将分区产生的数据读取任务放入任务队列中可以包括:
为分区产生的数据读取任务生成时间戳,所述时间戳用于指示开始执行该数据读取任务的时刻;将携带时间戳的所述数据读取任务放入所述任务队列;
从任务队列中提取数据读取任务包括:
从所述任务队列中提取时间戳所指示的时刻先于或等于提取时刻的数据读取任务。
本实现方式中,提取时刻可以但不限于是指开始从任务队列中提取数据读取任务的时刻;时间戳所指示的时刻等于提取时刻是指,时间戳所指示的时刻就是提取时刻,时间戳所指示的时刻先于提取时刻是指,时间戳所指示的时刻在提取时刻之前;比如提取时刻是某一天的6点18分55秒,时间戳指示的时刻是同一天的6点18分55秒,则等于提取时刻,如果是同一天的6点18分54秒、6点17分12秒等情况,都是先于提取时刻。
本实现方式中,可以通过调整数据读取任务的时间戳,保证数据读取任务按照业务紧迫程度来调用线程池使用。比如对于紧迫业务对应的分区所产生的数据读取任务,生成一个所指示的时刻比较靠前的时间戳。
其它实现方式中,也可以用其它方式确定提取数据读取任务的顺序,比如可以按照先进先出的规则来提取数据读取任务,再比如可以在放入任务队列前,为数据读取任务增加优先级,该优先级根据分区对应业务的紧迫程度确定,越紧迫则优先级越高;提取时按照优先级从高往低的顺序,从任务队列中进行提取。
本实现方式的一种备选方案中,为分区产生的数据读取任务生成时间戳可以包括:
对于分区产生的数据读取任务,用当前时刻加上所确定的延时长度得到预计执行时刻,用表示预计执行时刻的信息作为该数据读取任务的时间戳;所述延时长度可以根据所述分区的上一个数据读取任务所读取的数据量(即根据该数据读取任务所建立的读取线程在执行过程中读取的总数据量)确定;数据量越大则延时长度越短。
本备选方案中,当前时刻可以但不限于是指将该数据读取任务加入任务队列的时刻、或收到数据读取该任务的时刻、或为该数据读取任务生成时间戳的时刻等。表示预计执行时刻的信息可以是一个数值,也可以是一个数字序列,还可以是时刻本身等信息。
本备选方案中,比如当上一次从分区A读取到的数据量较小时,当分区A再产生数据读取任务时,为该数据读取任务生成的时间戳所指示的时刻将会比较靠后,也就是说会多等一段时间再对分区A进行数据读取。如果上一次从分区A读取到的数据量较大时,当分区A再产生数据读取任务时,为该数据读取任务生成的时间戳所指示的时刻将会比较靠前,也就是说会尽快再对分区A进行数据读取。
本备选方案中,一个分区的数据读取任务的时间戳所指示的时刻的先后,取决于上次从该分区读取的数据量的大小,因此可以实现对消费数据(即读取的数据量)的智能学习,以预测未来等待的时间,根据上次读取的数据量,酌情提高或降低下一次的尝试周期,也就是根据该分区的数据读取任务建立线程放入线程池的周期。
本备选方案中,可以预先建立读取的数据量的区间和延时长度之间的对应关系;可以根据上一个任务读取的数据量确定落入的区间,将该区间所对应的延时长度作为所确定的延时长度。
其中,延时长度根据所述分区的上一个数据读取任务所读取的数据量确定可以包括:
根据所述分区的上一个数据读取任务所读取的数据量所属的区间,以及预设的延时长度和数据量的区间之间的对应关系,确定所述延时长度。
其它备选方案中,也可以用另外的方式确定时间戳;比如根据本次数据读取任务的优先级、预计数据量等确定时间戳。
本备选方案中,对于一个分区的首个任务,可以用表示放入该任务的时刻的信息作为该任务的时间戳;也可以用放入该任务的时刻加上预定的延时长度得到预计执行时刻,用表示预计执行时刻的信息作为该任务的时间戳。本实现方式的一种备选方案中,所述任务队列中,数据读取任务可以按照所携带的时间戳所指示的时刻,从先到后进行排序;即:时间戳所指示的时刻越靠前,则任务在队列中的位置越靠前。
将分区产生的数据读取任务放入任务队列中还可以包括:
按照数据读取任务所携带的时间戳所指示的时刻,将所述数据读取任务放入任务队列中的相应位置。
比如,数据读取任务T1的时间戳指示的时刻是某一天的3点15分20秒,数据读取任务T2的时间戳指示的时刻是同一天的3点15分28秒,则任务队列中,数据读取任务T2排序在数据读取任务T1之后。如果待加入任务队列的数据读取任务T3的时间戳指示的时刻是同一天的3点15分23秒,则在任务队列中,将数据读取任务T3放在数据读取任务T1之后,数据读取任务T2之前。
本备选方案中,在从任务队列中提取数据读取任务时,提取任务队列中的前一个或多个数据读取任务即可,可以不用对任务队列中所有数据读取任务的时间戳进行检查;只要在任务队列中按照从先到后的顺序检查数据读取任务的时间戳,一旦出现一个数据读取任务的时间戳所指示的时间不先于提取时刻,就不用再检查排序在后的数据读取任务的时间戳。
本备选方案中,如果任务队列中恰好有多个数据读取任务的时间戳所指示的时刻相同,可以按照加入任务队列的顺序或其它条件对这多个任务进行排序。
本备选方案中,所述队列可以看成是一个优先队列,数据读取任务携带的时间戳作为该数据读取任务的优先级;时间戳所指示的时刻越靠前则优先级越高。优先队列具有最高级先出(largest-in,first-out)的行为特征,在上述优先队列中,具有最高优先级的数据读取任务将排列在最前面,会被最先提取到。
本实施例的一个例子如图5所示,可以应用于复杂的大数据处理场景,比如单台服务器需要处理3000以上个分区的数据的读取,每一个分区的数据量各有不同的情况。本例子中,由服务器中的中控***执行上述步骤S110~S120。
本例子中,将所有分区的数据读取任务放在一个优先队列中,其中,一个分区在同一时间只存在一个数据读取任务。每个数据读取任务携带有时间戳,用于指示开始执行该数据读取任务的时刻。在优先队列中,数据读取任务携带的时间戳作为该数据读取任务的优先级,时间戳所指示的时刻越靠前,则数据读取任务的优先级越高。
中控***负责检查优先队列,从优先队列中按顺序提取数据读取任务,根据所提取的数据读取任务建立新的读取线程放入线程池中,CPU轮转执行线程池中的每个读取线程。其中,线程池中的读取线程的个数是有上限的,完成的读取线程会从线程池中删除,线程池中的线程数未达到上限时,才能放入或启动新的读取线程。比如假设目前线程池中还可以放入一个线程,则中控***可以根据优先队列中排在第一位的数据读取任务,建立新的读取线程放入线程池中。
中控***可以周期性从优先队列中提取数据读取任务,将时间戳所指示的时刻先于或等于提取时刻的数据读取任务都提取出来。
周期性提取的情况下,本例子的某一次提取过程如图6所示,假设每个时间戳是一个表示时刻的数值,所表示的时刻越靠前则数值越小,即:假如表示某一天上午8:30的数值为X,表示同一天的上午9:00的数值为Y,则Y>X;表示后一天的上午8:30的数值为Z,则Z>Y>X。假设优先队列中存在的6个任务的时间戳分别是10、20、30、40、50、60,表示提取时刻的数值为32,则时间戳10、20、30所指示的时刻先于提取时刻,提取时间戳是10、20、30的任务。图6中为了方便理解,时间戳采用了比较简单的数值,实际应用中的时间戳不限于图6中的示例。
周期性提取的情况下,中控***可以先针对所提取的数据读取任务建立读取线程,但不放入线程池,即:先不启动该读取线程;按照数据读取任务在优先队列中的排列顺序,对未启动的读取线程进行排序,在线程池可以放入新的读取线程时,中控***按照排列顺序依次将建立的读取线程放入线程池(即依次启动建立的读取线程)。比如中控***提取了3个数据读取任务,当线程池可以放入一个新线程时,中控***将根据提取时排列在任务队列第一位的数据提取任务所建立的读取线程放入线程池;后续当线程池又可以放入一个新线程时,中控***将根据提取时排列在任务队列第二位的数据读取任务所建立的读取线程放入线程池。
中控***也可以在线程池中的线程不足时,再根据能放入的读取线程的个数,从优先队列中按序提取相应个数的数据读取任务,建立读取线程。在提取数据读取任务时,还可以只提取时间戳所指示的时刻先于提取时刻的数据读取任务,比如图6所示的情况,无论目前能建立3个还是4个或更多的新线程,都只提取3个数据读取任务。
在只提取时间戳所指示的时刻先于或等于提取时刻的任务的情况下,时间戳所指示的时刻迟于提取时刻的任务不予处理,这样可以实现Sleep的效果。
当分区产生新的数据读取任务时,由中控***为数据读取任务生成时间戳,并根据该时间戳将数据读取任务放到优先队列中的合适位置。如图7所示,假设优先队列中存在的6个数据读取任务的时间戳分别是10、20、30、40、50、60,新的数据读取任务的时间戳为35,则中控***将该数据读取任务放入时间戳为30的数据读取任务之后,时间戳为40的数据读取任务之前。如果恰好有多个数据读取任务的时间戳完全相等,可以按照加入优先队列的顺序对这多个数据读取任务排序。图7中为了方便理解,时间戳采用了比较简单的数值,实际应用中的时间戳不限于图7中的示例。
中控***对于一个分区的首个数据读取任务,可以用表示当前时刻的数值作为该数据读取任务的时间戳;也可以用当前加上预定时间长度得到预计执行时刻,用表示预计执行时刻的数值作为该数据读取任务的时间戳。其中,当前时刻比如但不限于是指将该数据读取任务加入优先队列的时刻、或收到该数据读取任务的时刻、或为该数据读取任务生成时间戳的时刻等。
中控***对于一个分区的非首个数据读取任务,可以用当前时刻加上所确定的延时长度得到预计执行时刻,用表示预计执行时刻的数值作为该数据读取任务的时间戳。其中,延时长度根据该分区上一个数据读取任务所读取的数据量(即根据该数据读取任务所建立的读取线程读取的数据量)确定;数据量越大则延时长度越短。本例子中,采用表一来确定延时长度。其中,当前时刻比如但不限于是指将该数据读取任务加入优先队列的时刻、或收到该数据读取任务的时刻、或为该数据读取任务生成时间戳的时刻等。
表一、读取的数据量和延时长度的对应关系表
上次读取的数据量(比特) | 延时长度 | 备注 |
0 | 5秒 | 可能没有数据 |
1000以下 | 1秒 | |
大于1000且5000以下 | 500毫秒 | |
大于5000且10000以下 | 200毫秒 | |
大于10000 | 50毫秒 | 最高优先级 |
实施例二、一种数据处理装置,如图8所示,包括:
队列管理模块81,用于将分区产生的数据读取任务放入任务队列中;
提取模块82,用于当线程池中的读取线程个数未达到预定上限时,从所述任务队列中提取数据读取任务,根据提取的任务建立读取线程放入所述线程池;其中,所述线程池用于存放轮流占用处理资源的读取线程。
本实施例中,所述队列管理模块81是上述数据处理装置中负责将数据读取任务加入任务队列的部分,可以是软件、硬件、或两者的结合。
本实施例中,所述提取模块82是上述数据处理装置中负责根据任务队列中的数据读取任务产生读取线程的部分,可以是软件、硬件、或两者的结合。
一种实现方式中,所述数据处理装置集成在对分区数据进行读取的计算设备(比如但不限于服务器)中,所述数据处理装置还可以包括:
读取模块,用于轮流执行所述线程池中的读取线程。
所述读取模块是上述数据处理装置中负责执行读取线程从分区中读取数据的部分,可以是软件、硬件、或两者的结合。
其它实现方式中,上述数据处理装置也可以和用于对分区数据进行读取的计算设备各自独立,由用于对分区数据进行读取的计算设备执行所述线程池中的读取线程。
一种实现方式中,所述队列管理模块将分区产生的数据读取任务放入任务队列中可以包括:
所述队列管理模块为分区产生的数据读取任务生成时间戳,所述时间戳用于指示开始执行该数据读取任务的时刻;将携带时间戳的所述数据读取任务放入所述任务队列;
所述提取模块从任务队列中提取数据读取任务包括:
所述提取模块从所述任务队列中提取时间戳所指示的时刻先于或等于提取时刻的数据读取任务。
本实现方式的一种备选方案中,所述队列管理模块为分区产生的数据读取任务生成时间戳可以包括:
所述队列管理模块对于分区产生的数据读取任务,用当前时刻加上所确定的延时长度得到预计执行时刻,用表示预计执行时刻的信息作为该数据读取任务的时间戳;所述延时长度根据该分区的上一个数据读取任务所读取的数据量确定;数据量越大则延时长度越短。
本备选方案中,所述延时长度根据所述分区的上一个数据读取任务所读取的数据量确定可以包括:
根据所述分区的上一个数据读取任务所读取的数据量所属的区间,以及预设的延时长度和数据量的区间之间的对应关系,确定所述延时长度。
本实现方式的一种备选方案中,所述任务队列中,数据读取任务可以按照所携带的时间戳所指示的时刻,从先到后进行排序;
所述队列管理模块将分区产生的数据读取任务放入任务队列中还可以包括:
所述队列管理模块按照数据读取任务所携带的时间戳所指示的时刻,将所述数据读取任务放入任务队列中的相应位置。
本备选方案中,所述任务队列可以是优先队列,数据读取任务携带的时间戳可以作为该数据读取任务的优先级;时间戳所指示的时刻越靠前则优先级越高。
一种实现方式中,所述线程池中线程个数的预定上限可以是用于执行所述线程池中读取线程的CPU个数的两倍。
本实施例的装置的模块所执行的操作分别对应于实施例一的步骤S110~S120,各模块的其它细节可参见实施例一。
实施例三、一种用于进行数据处理的电子设备,包括:存储器和处理器;
所述存储器用于保存用于进行数据处理的程序;所述用于进行数据处理的程序在被所述处理器读取执行时,执行以下操作:
将分区产生的数据读取任务放入任务队列中;
当线程池中的读取线程个数未达到预定上限时,从所述任务队列中提取数据读取任务,根据提取的任务建立读取线程放入所述线程池;其中,所述线程池用于存放轮流占用处理资源的读取线程。
本实施例中用于进行数据处理的程序在被处理器读取执行时,所执行的操作对应于实施例一的步骤S110~S120,该程序所执行的操作的其它细节可参见实施例一。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。
当然,本申请还可有其他多种实施例,在不背离本申请精神及其实质的情况下,熟悉本领域的技术人员当可根据本申请作出各种相应的改变和变形,但这些相应的改变和变形都应属于本申请的权利要求的保护范围。
Claims (17)
1.一种数据处理方法,包括:
将分区产生的数据读取任务放入任务队列中;
当线程池中的读取线程个数未达到预定上限时,从所述任务队列中提取数据读取任务,根据提取的任务建立读取线程放入所述线程池;其中,所述线程池用于存放轮流占用处理资源的读取线程;所述线程池中线程的数目小于所述分区的数量,每个分区单次只产生一个所述数据读取任务。
2.如权利要求1所述的数据处理方法,其特征在于,所述将分区产生的数据读取任务放入任务队列中包括:
为分区产生的数据读取任务生成时间戳,所述时间戳用于指示开始执行该数据读取任务的时刻;将携带时间戳的所述数据读取任务放入所述任务队列;
所述从任务队列中提取数据读取任务包括:
从所述任务队列中提取时间戳所指示的时刻先于或等于提取时刻的数据读取任务。
3.如权利要求2所述的数据处理方法,其特征在于,所述为分区产生的数据读取任务生成时间戳包括:
对于分区产生的数据读取任务,用当前时刻加上所确定的延时长度得到预计执行时刻,用表示预计执行时刻的信息作为该数据读取任务的时间戳;所述延时长度根据所述分区的上一个数据读取任务所读取的数据量确定;数据量越大则延时长度越短。
4.如权利要求3所述的数据处理方法,其特征在于,所述延时长度根据所述分区的上一个数据读取任务所读取的数据量确定包括:
根据所述分区的上一个数据读取任务所读取的数据量所属的区间,以及预设的延时长度和数据量的区间之间的对应关系,确定所述延时长度。
5.如权利要求2所述的数据处理方法,其特征在于:所述任务队列中,数据读取任务按照所携带的时间戳所指示的时刻,从先到后进行排序;
所述将分区产生的数据读取任务放入任务队列中还包括:
按照数据读取任务所携带的时间戳所指示的时刻,将所述数据读取任务放入任务队列中的相应位置。
6.如权利要求5所述的数据处理方法,其特征在于:
所述任务队列是优先队列,数据读取任务携带的时间戳作为该数据读取任务的优先级;时间戳所指示的时刻越靠前则优先级越高。
7.如权利要求1所述的数据处理方法,其特征在于:
所述线程池中线程个数的预定上限是用于执行所述线程池中读取线程的CPU个数的两倍。
8.如权利要求1~7中任一项所述的数据处理方法,其特征在于,还包括:轮流执行所述线程池中的读取线程。
9.一种数据处理装置,其特征在于,包括:
队列管理模块,用于将分区产生的数据读取任务放入任务队列中;
提取模块,用于当线程池中的读取线程个数未达到预定上限时,从所述任务队列中提取数据读取任务,根据提取的任务建立读取线程放入所述线程池;其中,所述线程池用于存放轮流占用处理资源的读取线程;所述线程池中线程的数目小于所述分区的数量,每个分区单次只产生一个所述数据读取任务。
10.如权利要求9所述的数据处理装置,其特征在于,所述队列管理模块将分区产生的数据读取任务放入任务队列中包括:
所述队列管理模块为分区产生的数据读取任务生成时间戳,所述时间戳用于指示开始执行该数据读取任务的时刻;将携带时间戳的所述数据读取任务放入所述任务队列;
所述提取模块从任务队列中提取数据读取任务包括:
所述提取模块从所述任务队列中提取时间戳所指示的时刻先于或等于提取时刻的数据读取任务。
11.如权利要求10所述的数据处理装置,其特征在于,所述队列管理模块为分区产生的数据读取任务生成时间戳包括:
所述队列管理模块对于分区产生的数据读取任务,用当前时刻加上所确定的延时长度得到预计执行时刻,用表示预计执行时刻的信息作为该数据读取任务的时间戳;所述延时长度根据该分区的上一个数据读取任务所读取的数据量确定;数据量越大则延时长度越短。
12.如权利要求11所述的数据处理装置,其特征在于,所述延时长度根据所述分区的上一个数据读取任务所读取的数据量确定包括:
根据所述分区的上一个数据读取任务所读取的数据量所属的区间,以及预设的延时长度和数据量的区间之间的对应关系,确定所述延时长度。
13.如权利要求10所述的数据处理装置,其特征在于:所述任务队列中,数据读取任务按照所携带的时间戳所指示的时刻,从先到后进行排序;
所述队列管理模块将分区产生的数据读取任务放入任务队列中还包括:
所述队列管理模块按照数据读取任务所携带的时间戳所指示的时刻,将所述数据读取任务放入任务队列中的相应位置。
14.如权利要求13所述的数据处理装置,其特征在于:
所述任务队列是优先队列,数据读取任务携带的时间戳作为该数据读取任务的优先级;时间戳所指示的时刻越靠前则优先级越高。
15.如权利要求9所述的数据处理装置,其特征在于:
所述线程池中线程个数的预定上限是用于执行所述线程池中读取线程的CPU个数的两倍。
16.如权利要求9~15中任一项所述的数据处理装置,其特征在于,还包括:
读取模块,用于轮流执行所述线程池中的读取线程。
17.一种用于进行数据处理的电子设备,包括:存储器和处理器;
其特征在于:所述存储器用于保存用于进行数据处理的程序;所述用于进行数据处理的程序在被所述处理器读取执行时,执行以下操作:
将分区产生的数据读取任务放入任务队列中;
当线程池中的读取线程个数未达到预定上限时,从所述任务队列中提取数据读取任务,根据提取的任务建立读取线程放入所述线程池;其中,所述线程池用于存放轮流占用处理资源的读取线程;所述线程池中线程的数目小于所述分区的数量,每个分区单次只产生一个所述数据读取任务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610818710.4A CN107818012B (zh) | 2016-09-12 | 2016-09-12 | 一种数据处理方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610818710.4A CN107818012B (zh) | 2016-09-12 | 2016-09-12 | 一种数据处理方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107818012A CN107818012A (zh) | 2018-03-20 |
CN107818012B true CN107818012B (zh) | 2021-08-27 |
Family
ID=61601210
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610818710.4A Active CN107818012B (zh) | 2016-09-12 | 2016-09-12 | 一种数据处理方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107818012B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109086138A (zh) * | 2018-08-07 | 2018-12-25 | 北京京东金融科技控股有限公司 | 数据处理方法和*** |
CN111367627B (zh) * | 2018-12-26 | 2024-02-13 | 三六零科技集团有限公司 | 一种读写磁盘任务的处理方法和装置 |
CN109840149B (zh) * | 2019-02-14 | 2021-07-30 | 百度在线网络技术(北京)有限公司 | 任务调度方法、装置、设备及存储介质 |
CN111259246A (zh) * | 2020-01-17 | 2020-06-09 | 北京达佳互联信息技术有限公司 | 信息推送方法、装置、电子设备及存储介质 |
CN114519017B (zh) * | 2020-11-18 | 2024-03-29 | 舜宇光学(浙江)研究院有限公司 | 用于事件相机的数据传输方法及其***和电子设备 |
CN117082307B (zh) * | 2023-10-13 | 2023-12-29 | 天津幻彩科技有限公司 | 基于流畅度提升的三维场景流数据播放控制方法和设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102591721A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 一种分配线程执行任务的方法和*** |
CN103324525A (zh) * | 2013-07-03 | 2013-09-25 | 东南大学 | 一种云计算环境下的任务调度方法 |
CN103955491A (zh) * | 2014-04-15 | 2014-07-30 | 南威软件股份有限公司 | 一种定时数据增量同步的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10089142B2 (en) * | 2013-08-21 | 2018-10-02 | Hasso-Plattner-Institut Fur Softwaresystemtechnik Gmbh | Dynamic task prioritization for in-memory databases |
-
2016
- 2016-09-12 CN CN201610818710.4A patent/CN107818012B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102591721A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 一种分配线程执行任务的方法和*** |
CN103324525A (zh) * | 2013-07-03 | 2013-09-25 | 东南大学 | 一种云计算环境下的任务调度方法 |
CN103955491A (zh) * | 2014-04-15 | 2014-07-30 | 南威软件股份有限公司 | 一种定时数据增量同步的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107818012A (zh) | 2018-03-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107818012B (zh) | 一种数据处理方法、装置及电子设备 | |
CN112199194B (zh) | 基于容器集群的资源调度方法、装置、设备和存储介质 | |
CN107360206B (zh) | 一种区块链共识方法、设备及*** | |
CN106802826B (zh) | 一种基于线程池的业务处理方法及装置 | |
EP3129880B1 (en) | Method and device for augmenting and releasing capacity of computing resources in real-time stream computing system | |
CN106293893B (zh) | 作业调度方法、装置及分布式*** | |
CN115328663B (zh) | 基于PaaS平台进行资源调度的方法、装置、设备和存储介质 | |
CN107241281B (zh) | 一种数据处理方法及其装置 | |
US8516492B2 (en) | Soft partitions and load balancing | |
US20160378570A1 (en) | Techniques for Offloading Computational Tasks between Nodes | |
CN107515784B (zh) | 一种在分布式***中计算资源的方法与设备 | |
CN107515781B (zh) | 一种基于多处理器的确定性任务调度及负载均衡*** | |
WO2022095815A1 (zh) | 显存管理方法、装置、设备及*** | |
CN107908471B (zh) | 一种任务并行处理方法和处理*** | |
EP3376381A1 (en) | Resource management method and system, and computer storage medium | |
CN109739627B (zh) | 任务的调度方法、电子设备及介质 | |
CN110716813A (zh) | 数据流处理方法、装置、可读存储介质及处理器 | |
CN111857992B (zh) | 一种Radosgw模块中线程资源分配方法和装置 | |
CN114625533A (zh) | 分布式任务调度方法、装置、电子设备及存储介质 | |
CN109388501B (zh) | 基于人脸识别请求的通信匹配方法、装置、设备及介质 | |
CN109376020B (zh) | 多区块链交互并发下的数据处理方法、装置及存储介质 | |
CN103823712A (zh) | 一种多cpu虚拟机***的数据流处理方法和装置 | |
CN109819674B (zh) | 计算机存储介质、嵌入式调度方法及*** | |
CN117234691A (zh) | 任务调度方法及装置 | |
CN108446169B (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 |