CN116880990A - 任务执行方法、装置、电子设备及计算机可读存储介质 - Google Patents
任务执行方法、装置、电子设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN116880990A CN116880990A CN202310960106.5A CN202310960106A CN116880990A CN 116880990 A CN116880990 A CN 116880990A CN 202310960106 A CN202310960106 A CN 202310960106A CN 116880990 A CN116880990 A CN 116880990A
- Authority
- CN
- China
- Prior art keywords
- task
- executed
- queue
- identifier
- thread
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 59
- 238000012545 processing Methods 0.000 claims description 29
- 238000004590 computer program Methods 0.000 claims description 17
- 230000006870 function Effects 0.000 claims description 9
- 238000005192 partition Methods 0.000 claims description 6
- 238000000605 extraction Methods 0.000 claims 2
- 101100102627 Oscarella pearsei VIN1 gene Proteins 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000009434 installation Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 230000007613 environmental effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/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/48—Indexing scheme relating to G06F9/48
- G06F2209/483—Multiproc
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请涉及程序线程技术领域,提供了一种任务执行方法、装置、电子设备及计算机可读存储介质。该方法包括:创建线程池,在线程池中创建若干线程和每个线程对应的任务队列;从消息队列中获取待执行任务和待执行任务的标识符;根据标识符,确定待执行任务对应的任务队列,将待执行任务加入对应的任务队列;控制线程监听对应的任务队列,并从对应的任务队列中获取待执行任务并执行。本申请在线程池创建线程的同时创建与线程一一对应的任务队列,待执行任务在进入消息队列时按顺序进入,因此同一个标识符的所有待执行任务将按顺序进入同一个任务队列,由同一个线程按顺序执行,保证了任务的执行顺序,同时线程池的多线程并行确保了任务的高效执行。
Description
技术领域
本申请涉及程序线程技术领域,尤其涉及一种任务执行方法、装置、电子设备及计算机可读存储介质。
背景技术
目前java支持的线程在提交任务时,不能指定执行任务的线程,所有的任务都将被放入同一个队列中,池中所有的线程都从该队列获取任务并执行。此时提交的任务虽然按照提交顺序分配到各线程,但是线程中的执行速度不定,关联的任务如果由不同线程执行,则无法保证任务顺序执行的要求。
因此,如何提供一种解决上述技术问题的方案是目前本领域技术人员需要解决的问题。
发明内容
有鉴于此,本申请实施例提供了一种任务执行方法、装置、电子设备及计算机可读存储介质,以解决现有技术中多线程执行线程时无法保证任务执行顺序的问题。
本申请实施例的第一方面,提供了一种任务执行方法,应用于执行任务的服务器,包括:
创建线程池,在线程池中创建若干线程和每个线程对应的任务队列;
从消息队列中获取待执行任务和待执行任务的标识符;
根据标识符,确定待执行任务对应的任务队列,将待执行任务加入对应的任务队列;
控制线程监听对应的任务队列,并从对应的任务队列中获取待执行任务并执行。
本申请实施例的第二方面,提供了一种任务执行装置,应用于执行任务的服务器,包括:
创建模块,用于创建线程池,在线程池中创建若干线程和每个线程对应的任务队列;
任务获取模块,用于从消息队列中获取待执行任务和待执行任务的标识符;
任务分配模块,用于根据标识符,确定待执行任务对应的任务队列,将待执行任务加入对应的任务队列;
任务执行模块,用于控制线程监听对应的任务队列,并从对应的任务队列中获取待执行任务并执行。
本申请实施例的第三方面,提供了一种电子设备,包括存储器、处理器以及存储在存储器中并且可在处理器上运行的计算机程序,该处理器执行计算机程序时实现上述方法的步骤。
本申请实施例的第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述方法的步骤。
本申请实施例与现有技术相比存在的有益效果至少包括:本申请实施例通过在线程池创建线程的同时创建与线程一一对应的任务队列,将消息队列中的待执行任务首先按照标识符分配到对应的任务队列中,线程只执行与其对应的任务队列中的任务,由于待执行任务在进入消息队列时按顺序进入,因此同一个标识符的所有待执行任务将按顺序进入同一个任务队列,进而由同一个线程按顺序执行,从而保证了任务的执行顺序,同时线程池的多线程并行确保了任务的高效执行。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本申请实施例的一种应用场景的场景示意图;
图2是本申请实施例提供的一种任务执行方法的流程示意图;
图3是本申请实施例提供的一种具体的任务执行方法的流程示意图;
图4是本申请实施例提供的一种任务执行装置的结构示意图;
图5是本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
下面将结合附图详细说明根据本申请实施例的一种任务执行方法、装置、电子设备及计算机可读存储介质。
图1是本申请实施例的应用场景的场景示意图。该应用场景可以包括第一终端设备101、第二终端设备102、第三终端设备103、服务器104以及网络105。
第一终端设备101可以是硬件,也可以是软件。当第一终端设备101为硬件时,其可以是支持与服务器104通信的各种电子设备,包括但不限于车辆系统、智能手机、平板电脑、膝上型便携计算机和台式计算机等;当第一终端设备101为软件时,其可以安装在如上所述的电子设备中。第一终端设备101可以实现为多个软件或软件模块,也可以实现为单个软件或软件模块,本申请实施例对此不作限制。进一步地,第一终端设备101上可以安装有各种应用,例如数据处理应用、即时通信工具、社交平台软件、搜索类应用、购物类应用等。
第二终端设备102可以是硬件,也可以是软件。当第二终端设备102为硬件时,其可以是支持与服务器104通信的各种电子设备,包括但不限于车辆系统、智能手机、平板电脑、膝上型便携计算机和台式计算机等;当第二终端设备102为软件时,其可以安装在如上所述的电子设备中。第二终端设备102可以实现为多个软件或软件模块,也可以实现为单个软件或软件模块,本申请实施例对此不作限制。进一步地,第二终端设备102上可以安装有各种应用,例如数据处理应用、即时通信工具、社交平台软件、搜索类应用、购物类应用等。
第三终端设备103可以是硬件,也可以是软件。当第三终端设备103为硬件时,其可以是支持与服务器104通信的各种电子设备,包括但不限于车辆系统、智能手机、平板电脑、膝上型便携计算机和台式计算机等;当第三终端设备103为软件时,其可以安装在如上所述的电子设备中。第三终端设备103可以实现为多个软件或软件模块,也可以实现为单个软件或软件模块,本申请实施例对此不作限制。进一步地,第三终端设备103上可以安装有各种应用,例如数据处理应用、即时通信工具、社交平台软件、搜索类应用、购物类应用等。
服务器104可以是提供各种服务的服务器,例如,对与其建立通信连接的终端设备发送的请求进行接收的后台服务器,该后台服务器可以对终端设备发送的请求进行接收和分析等处理,并生成处理结果。服务器104可以是一台服务器,也可以是由若干台服务器组成的服务器集群,或者还可以是一个云计算服务中心,本申请实施例对此不作限制。
需要说明的是,服务器104可以是硬件,也可以是软件。当服务器104为硬件时,其可以是为第一终端设备101、第二终端设备102和第三终端设备103提供各种服务的各种电子设备。当服务器104为软件时,其可以是为第一终端设备101、第二终端设备102和第三终端设备103提供各种服务的多个软件或软件模块,也可以是为第一终端设备101、第二终端设备102和第三终端设备103提供各种服务的单个软件或软件模块,本申请实施例对此不作限制。
网络105可以是采用同轴电缆、双绞线和光纤连接的有线网络,也可以是无需布线就能实现各种通信设备互联的无线网络,例如,蓝牙(Bluetooth)、近场通信(Near FieldCommunication,NFC)、红外(Infrared)等,本申请实施例对此不作限制。
需要说明的是,第一终端设备101、第二终端设备102、第三终端设备103、服务器104以及网络105的具体类型、数量和组合可以根据应用场景的实际需求进行调整,本申请实施例对此不作限制。
图2是本申请实施例提供的一种任务执行方法的流程示意图。图2的任务执行方法应用于执行任务的服务器,可以由图1的服务器执行。如图2所示,该任务执行方法包括:
S201:创建线程池,在线程池中创建若干线程和每个线程对应的任务队列;
S202:从消息队列中获取待执行任务和待执行任务的标识符;
S203:根据标识符,确定待执行任务对应的任务队列,将待执行任务加入对应的任务队列;
S204:控制线程监听对应的任务队列,并从对应的任务队列中获取待执行任务并执行。
可以理解的是本实施例中的任务执行方法由图1的服务器执行,服务器根据步骤S201创建线程池、线程和任务队列,然后根据步骤S202从消息队列中获取待执行任务和标识符,再执行步骤S203将待执行任务加入任务队列,同时执行步骤S204控制线程监听任务队列,在任务队列中存在待执行任务时获取该待执行任务并执行。服务器在完成步骤S01之后,可持续监听消息队列并在消息队列中存在待执行任务时执行S202和S203,同时持续执行步骤S204控制线程监听任务队列,对于服务器来说步骤S202-S203和步骤S204为并行关系,每个动作都在持续执行。对于同一个待执行任务来说,该待执行任务被其他设备转发到消息队列中,在被服务器监听到后,服务器将该待执行任务从消息队列中被拉取并加入相应的任务队列,然后由线程拉取任务队列并执行。
具体的步骤S201在创建线程和对应的任务队列时,可通过映射表的形式绑定线程、任务队列和任务队列的队列标号。该线程只能从绑定的任务队列中获取任务并执行,如果任务队列中没有任务阻塞则等待,有任务则被唤醒执行任务。
进一步的步骤S201创建线程池,在线程池中创建若干线程和每个线程对应的任务队列之后,任务队列可以通过链表的形式存储,即任务队列链表。通常情况下,链表包括一连串的节点,每个节点包括任意的应用实例数据和用于指向下一个节点的位置的指针,当任务队列使用链表形式存储时,各节点的应用实例数据为待执行任务及其相关数据,利用指针关联实现任务队列中各人物之间的位置关系。
具体的步骤S202-S203的执行时,服务器对消息队列进行监听,当监听到待执行任务,从消息队列中获取待执行任务及其标识符,此处标识符为待执行任务被转发至消息队列时的消息key,根据消息key,待执行任务被转发至消息队列的相应分区,以便服务器对其监听和后续处理。此处标识符可以为待执行任务被车辆系统发送到消息队列时车辆系统对应的车辆VIN码,或其他可以对待执行任务的发送方进行标识的字符串。
具体的步骤S203根据标识符,确定待执行任务对应的任务队列的过程,包括:
确定标识符的哈希码;
对哈希码进行取余处理或取模处理,得到对应的队列标号;
将队列标号对应的任务队列确定为待执行任务的任务队列。
具体的,对哈希码进行取余处理或取模处理,得到对应的队列标号的过程,包括:
以哈希码为被除数、N为除数进行取余处理或取模处理,得到对应的队列标号;
其中N为任务队列的个数,所有任务队列的队列标号分别为0至N-1。
以N=2为例,即线程池中有2个线程:thread1和thread2,两个任务队列queue1和queue2,其中线程thread1对应任务队列queue1,队列标号为0;线程thread2对应任务队列queue2,队列标号为1。在接收到一个标识符后计算得到哈希码hashcode,对哈希码进行取模处理并将其作为队列标号,则有如下关系:
Index=hashcode%2;
其中Index为队列标号,%为取模处理。
可以理解的是,在同一个示例性的实施例中,所有的哈希码的运算处理方式相同,均为取余处理或均为取模处理。除了上述结合哈希码、取余处理或取模处理确定待执行任务所对应的任务队列的方案外,本实施例中还可采取其他方式确定对应待执行任务的任务队列,例如,判断当前待执行任务的标识符是否与之前的待执行任务的标识符相同,若是,则直接将当前待执行任务加入上次该标识符的待执行任务所在的任务队列,若否,则根据任务队列负荷均衡或随机分配的原则,将当前待执行任务加入某一任务队列。再例如,根据某一类待执行任务的预设顺序,判断当前待执行任务是否为预设顺序的第一个执行任务,若是,则根据任务队列负荷均衡或随机分配的原则,将当前待执行任务加入某一任务队列,若否,则将当前待执行任务加入第一个执行任务所在的任务队列。本实施例对于如何确定待执行任务对应的任务队列不做限定,只要能够确保相同标识符的所有待执行任务均分配到同一个任务队列即可。具体的,在一示例性的实施例中,根据标识符,确定待执行任务对应的任务队列的过程,包括:
遍历所有任务队列,判断任一任务队列是否存在标识符;
若是,将标识符所在的任务队列确定为待执行任务对应的任务队列;
若否,根据负荷均衡原则确定待执行任务对应的任务队列。
这里的负荷均衡原则的目的在于控制各任务队列消耗的资源、时间消耗相近,通常以各任务队列上待执行任务的数量相近作为均衡标准。可以理解的是服务器通过特定的函数方法执行步骤S202-S203,具体的步骤S202从消息队列中获取待执行任务和待执行任务的标识符的过程,包括:
执行提交线程池函数taskPool.submit,从消息队列中获取待执行任务和待执行任务的标识符;
相应的步骤S203将待执行任务加入对应的任务队列的过程,包括:
执行添加队列函数queue.add,将待执行任务加入对应的任务队列。
具体的,仍以线程池中2个线程为例,当获取标识符为VIN1待执行任务task1,执行函数为提交线程池函数taskPool.submit(VIN1,task1),服务器将任务提交到线程池;当确认将待执行任务task1加入任务队列queue1,执行提交队列函数queue1.add(task1)将待执行任务task1加入任务队列queue1。
在一示例性的实施例中,本实施例方法可用于从MQTT(Message QueuingTelemetry Transport,消息队列遥测传输协议)对应的消息队列中获取待执行任务,此时消息队列具体为KAFKA消息队列,进一步的本实施例方法可应用于处理OTA任务,即服务器为负责OTA云端服务的服务器,此时从消息队列中获取待执行任务和待执行任务的标识符的过程,包括:
从KAFKA消息队列的OTA任务分区中获取待执行任务和待执行任务的标识符。
可以理解的是按照传统的多线程任务处理方法,OTA服务的执行有如下情况:车辆在OTA升级过程中,同一个OTA升级任务在执行过程中会有不同状态先后上报到云端,云端记录并更新任务执行状态。具体的,车辆先通过公共MQTT组件将状态上报到云端,云端在将上报信息转发到Kafka消息队列,最后再由OTA云端服务监听Kafka消息队列进行处理。OTA云端服务为了提高处理速度,会使用多线程消费Kafka消息,多线程的异步处理势必会导致车辆上报状态顺序的处理完成时间被打乱,这样就会导致先上报的状态覆盖掉后结束的状态,从而导致车辆任务状态更新错误。比如,车辆依次上报开始下载状态和下载完成状态,在KAFKA消息队列中消息顺序也是按车端上报顺序存储的,OTA云端服务也应按照开始下载状态、下载完成状态的顺序更新车辆升级状态,若OTA云端服务使用多线程处理,线程thread1从KAFKA消息队列拉取到开始下载状态消息进行处理,线程thread2从KAFKA消息队列拉取到下载完成状态消息进行处理,两个线程会同时更新该车辆的任务执行状态,那么可能出现线程thread2先更新任务执行状态为下载完成状态,线程thread1后更新为开始下载状态的情况,这样就导致车辆实际升级状态发生更新错误。
而本实施例方法,同一个标识符的待执行任务将按顺序被分配到同一个任务队列中,因此同一个标识符的待执行任务将由同一个线程按照顺序执行,具体如3所示,车辆VIN码分别为VIN1和VIN2的两辆车依次上报OTA状态,预设状态顺序为开始下载状态、下载完成状态、安装前环境检查状态、开始安装状态、安装完成状态,使用VIN码作为待执行任务的标识码,所有的待执行任务在KAFKA消息队列的OTA任务分区中以上报顺序进行排列,服务器OTA-SERVICE订阅消费KAFKA消息队列的OTA任务分区,以按照顺序依次获取其中的待执行任务,每次获取到待执行任务分配到对应的任务队列,由线程依次获取待执行任务并执行,从而在KAFKA消息队列中不分标识码仅按转发顺序排列的所有待执行任务,在线程池ThreadPool的任务队列中如下排列:任务队列queue1中:VIN1:开始下载状态、VIN1:下载完成状态、VIN1:安装前环境检查状态、VIN1:开始安装状态、VIN1:安装完成状态,线程thread1在任务队列queue1中获取待执行任务并执行;任务队列queue2中:VIN2:开始下载状态、VIN2:下载完成状态、VIN2:安装前环境检查状态、VIN2:开始安装状态、VIN2:安装完成状态,线程thread2在任务队列queue2中获取待执行任务并执行。如此即可保证VIN1和VIN2上报的状态信息被依次处理。
除了以上按照顺序处理的方案外,如果出现了同一个标识符的同一个待执行任务被上报两次的情况,只认为第一次上报有效,确保消息处理的冥等性。
本申请实施例通过在线程池创建线程的同时创建与线程一一对应的任务队列,将消息队列中的待执行任务首先按照标识符分配到对应的任务队列中,线程只执行与其对应的任务队列中的任务,由于待执行任务在进入消息队列时按顺序进入,因此同一个标识符的所有待执行任务将按顺序进入同一个任务队列,进而由同一个线程按顺序执行,从而保证了任务的执行顺序,同时线程池的多线程并行确保了任务的高效执行。
上述所有可选技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
图4是本申请实施例提供的一种任务执行装置的示意图。该任务执行装置应用于执行任务的服务器,如图4所示,该任务执行装置包括:
创建模块401,用于创建线程池,在线程池中创建若干线程和每个线程对应的任务队列;
任务获取模块402,用于从消息队列中获取待执行任务和待执行任务的标识符;
任务分配模块403,用于根据标识符,确定待执行任务对应的任务队列,将待执行任务加入对应的任务队列;
任务执行模块404,用于控制线程监听对应的任务队列,并从对应的任务队列中获取待执行任务并执行。
本申请实施例通过在线程池创建线程的同时创建与线程一一对应的任务队列,将消息队列中的待执行任务首先按照标识符分配到对应的任务队列中,线程只执行与其对应的任务队列中的任务,由于待执行任务在进入消息队列时按顺序进入,因此同一个标识符的所有待执行任务将按顺序进入同一个任务队列,进而由同一个线程按顺序执行,从而保证了任务的执行顺序,同时线程池的多线程并行确保了任务的高效执行。
在一示例性的实施例中,标识符具体为待执行任务被车辆系统发送到消息队列时车辆系统对应的车辆VIN码。
在一示例性的实施例中,根据标识符,确定待执行任务对应的任务队列的过程,包括:
确定标识符的哈希码;
对哈希码进行取余处理或取模处理,得到对应的队列标号;
将队列标号对应的任务队列确定为待执行任务的任务队列。
在一示例性的实施例中,对哈希码进行取余处理或取模处理,得到对应的队列标号的过程,包括:
以哈希码为被除数、N为除数进行取余处理或取模处理,得到对应的队列标号;
其中N为任务队列的个数,所有任务队列的队列标号分别为0至N-1。
在一示例性的实施例中,根据标识符,确定待执行任务对应的任务队列的过程,包括:
遍历所有任务队列,判断任一任务队列是否存在标识符;
若是,将标识符所在的任务队列确定为待执行任务对应的任务队列;
若否,根据负荷均衡原则确定待执行任务对应的任务队列。
在一示例性的实施例中,从消息队列中获取待执行任务和待执行任务的标识符的过程,包括:
执行提交线程池函数taskPool.submit,从消息队列中获取待执行任务和待执行任务的标识符;
将待执行任务加入对应的任务队列的过程,包括:
执行提交队列函数queue.add,将待执行任务加入对应的任务队列。
在一示例性的实施例中,从消息队列中获取待执行任务和待执行任务的标识符的过程,包括:
从KAFKA消息队列的OTA任务分区中获取待执行任务和待执行任务的标识符。
图5是本申请实施例提供的电子设备5的示意图。如图5所示,该实施例的电子设备5包括:处理器501、存储器502以及存储在该存储器502中并且可在处理器501上运行的计算机程序503。处理器501执行计算机程序503时实现上述各个方法实施例中的步骤。或者,处理器501执行计算机程序503时实现上述各装置实施例中各模块/单元的功能。
电子设备5可以是桌上型计算机、笔记本、掌上电脑及云端服务器等电子设备。电子设备5可以包括但不仅限于处理器501和存储器502。本领域技术人员可以理解,图5仅仅是电子设备5的示例,并不构成对电子设备5的限定,可以包括比图示更多或更少的部件,或者不同的部件。
处理器501可以是中央处理单元(Central Processing Unit,CPU),也可以是其它通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。
存储器502可以是电子设备5的内部存储单元,例如,电子设备5的硬盘或内存。存储器502也可以是电子设备5的外部存储设备,例如,电子设备5上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。存储器502还可以既包括电子设备5的内部存储单元也包括外部存储设备。存储器502用于存储计算机程序以及电子设备所需的其它程序和数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,计算机程序可以存储在计算机可读存储介质中,该计算机程序在被处理器执行时,可以实现上述各个方法实施例的步骤。计算机程序可以包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读存储介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读存储介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如,在某些司法管辖区,根据立法和专利实践,计算机可读存储介质不包括电载波信号和电信信号。
以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种任务执行方法,其特征在于,应用于执行任务的服务器,包括:
创建线程池,在所述线程池中创建若干线程和每个所述线程对应的任务队列;
从消息队列中获取待执行任务和所述待执行任务的标识符;
根据所述标识符,确定所述待执行任务对应的所述任务队列,将所述待执行任务加入对应的所述任务队列;
控制所述线程监听对应的所述任务队列,并从对应的所述任务队列中获取所述待执行任务并执行。
2.根据权利要求1所述的方法,其特征在于,所述标识符具体为所述待执行任务被车辆系统发送到所述消息队列时所述车辆系统对应的车辆VIN码。
3.根据权利要求1所述的方法,其特征在于,根据所述标识符,确定所述待执行任务对应的所述任务队列的过程,包括:
确定所述标识符的哈希码;
对所述哈希码进行取余处理或取模处理,得到对应的队列标号;
将所述队列标号对应的所述任务队列确定为所述待执行任务的所述任务队列。
4.根据权利要求3所述的方法,其特征在于,对所述哈希码进行取余处理或取模处理,得到对应的队列标号的过程,包括:
以所述哈希码为被除数、N为除数进行取余处理或取模处理,得到对应的队列标号;
其中N为所述任务队列的个数,所有所述任务队列的所述队列标号分别为0至N-1。
5.根据权利要求1所述的方法,其特征在于,根据所述标识符,确定所述待执行任务对应的所述任务队列的过程,包括:
遍历所有所述任务队列,判断任一所述任务队列是否存在所述标识符;
若是,将所述标识符所在的所述任务队列确定为所述待执行任务对应的所述任务队列;
若否,根据负荷均衡原则确定所述待执行任务对应的所述任务队列。
6.根据权利要求1所述的方法,其特征在于,从消息队列中获取待执行任务和所述待执行任务的标识符的过程,包括:
执行提交线程池函数,从消息队列中获取待执行任务和所述待执行任务的标识符;
将所述待执行任务加入对应的所述任务队列的过程,包括:
执行添加队列函数,将所述待执行任务加入对应的所述任务队列。
7.根据权利要求1至6中任一项所述的方法,其特征在于,从消息队列中获取待执行任务和所述待执行任务的标识符的过程,包括:
从KAFKA消息队列的OTA任务分区中获取待执行任务和所述待执行任务的标识符。
8.一种任务执行装置,其特征在于,应用于执行任务的服务器,包括:
创建模块,用于创建线程池,在所述线程池中创建若干线程和每个所述线程对应的任务队列;
任务获取模块,用于从消息队列中获取待执行任务和所述待执行任务的标识符;
任务分配模块,用于根据所述标识符,确定所述待执行任务对应的所述任务队列,将所述待执行任务加入对应的所述任务队列;
任务执行模块,用于控制所述线程监听对应的所述任务队列,并从对应的所述任务队列中获取所述待执行任务并执行。
9.一种电子设备,包括存储器、处理器以及存储在所述存储器中并且可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310960106.5A CN116880990A (zh) | 2023-07-28 | 2023-07-28 | 任务执行方法、装置、电子设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310960106.5A CN116880990A (zh) | 2023-07-28 | 2023-07-28 | 任务执行方法、装置、电子设备及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116880990A true CN116880990A (zh) | 2023-10-13 |
Family
ID=88264368
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310960106.5A Pending CN116880990A (zh) | 2023-07-28 | 2023-07-28 | 任务执行方法、装置、电子设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116880990A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117221324A (zh) * | 2023-11-09 | 2023-12-12 | 腾讯科技(深圳)有限公司 | 云服务器的创建任务分发方法、装置、电子设备及介质 |
-
2023
- 2023-07-28 CN CN202310960106.5A patent/CN116880990A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117221324A (zh) * | 2023-11-09 | 2023-12-12 | 腾讯科技(深圳)有限公司 | 云服务器的创建任务分发方法、装置、电子设备及介质 |
CN117221324B (zh) * | 2023-11-09 | 2024-03-08 | 腾讯科技(深圳)有限公司 | 云服务器的创建任务分发方法、装置、电子设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109491801B (zh) | 微服务访问调度方法、装置、介质及电子设备 | |
CN110781373B (zh) | 榜单更新方法、装置、可读介质和电子设备 | |
US9038093B1 (en) | Retrieving service request messages from a message queue maintained by a messaging middleware tool based on the origination time of the service request message | |
CN110888658B (zh) | 应用程序中功能模块的动态化方法、装置及存储介质 | |
CN111858586B (zh) | 一种数据处理的方法和装置 | |
CN113722056A (zh) | 任务调度方法、装置、电子设备和计算机可读介质 | |
CN116880990A (zh) | 任务执行方法、装置、电子设备及计算机可读存储介质 | |
CN114297278A (zh) | 批量数据快速写入方法、系统和装置 | |
CN111026552A (zh) | 资源的调度方法、装置、电子设备和计算机可读存储介质 | |
CN108764866B (zh) | 用于分配资源、领取资源的方法和设备 | |
CN110619204A (zh) | 一种邀请码生成方法、装置、终端设备及存储介质 | |
CN112084042A (zh) | 一种消息处理的方法和装置 | |
CN113572833A (zh) | 一种云手机的维护方法、装置、电子设备和存储介质 | |
CN111580883B (zh) | 应用程序启动方法、装置、计算机系统和介质 | |
CN113010238A (zh) | 一种微应用调用接口的权限确定方法、装置和系统 | |
CN112083945A (zh) | Npm安装包的更新提示方法、装置、电子设备及存储介质 | |
CN112948138A (zh) | 一种处理消息的方法和装置 | |
CN109213815B (zh) | 控制执行次数的方法、装置、服务器终端以及可读介质 | |
CN113988992B (zh) | 订单信息发送方法、装置、电子设备和计算机可读介质 | |
US20150120607A1 (en) | System and method for customer event email consolidation and delivery | |
US11277300B2 (en) | Method and apparatus for outputting information | |
CN113127561B (zh) | 业务单号的生成方法、装置、电子设备和存储介质 | |
CN113779122A (zh) | 导出数据的方法和装置 | |
CN113448652A (zh) | 一种请求处理方法和装置 | |
CN111538721A (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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20240118 Address after: No. 13 Xingxiang Road, Zengjia Town, High tech Zone, Shapingba District, Chongqing, 400039 Applicant after: Chongqing Selis Phoenix Intelligent Innovation Technology Co.,Ltd. Address before: 401120 No. 618 Liangjiang Avenue, Longxing Town, Yubei District, Chongqing City Applicant before: Chongqing Celes New Energy Automobile Design Institute Co.,Ltd. |