一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

任务处理方法、装置、电子设备及存储介质与流程

2022-02-20 13:01:22 来源:中国专利 TAG:
1.本发明涉及计算机
技术领域
:,尤其涉及一种任务处理方法、装置、电子设备及存储介质。
背景技术
::2.随着计算机技术的发展,在解决大量数据计算的方面,通常会使用并行计算来提高计算速度,并行计算需要使用多种计算资源解决计算的问题,计算资源包括硬件加速单元、神经网络计算单元、cpu单元、dsp单元等。目前的并行计算调度主要是采用多线程和线程间消息队列来调度,但并行计算调度由于线程过多会造成操作系统调度开销过大,若增加计算单元来提高操作系统调度能力,由于软硬件之间的高度依赖,使得增加计算单元的过程繁琐,需要进行各种复杂配置,使得扩展难度高。因此,现有技术中,对于多线程计算资源的调度效率低、扩展性差。技术实现要素:3.本发明实施例提供一种任务处理方法,通过将驱动任务转换为驱动任务流,使得多线程之间的调度转换为流之间的调度,利用流任务队列和驱动分发来实现驱动任务流之间的调度,由于通过流任务队列调度,相比于多线程之间的直接调度,系统调度开销降低了。另外,通过流任务队列将应用层与驱动层之间进行解耦,可以通过配置流任务队列和驱动来进行扩展。4.第一方面,本发明实施例提供一种任务处理方法,所述方法包括:5.从应用层中获取待处理任务,所述待处理任务包括控制任务以及驱动请求任务;6.基于所述控制任务,将所述驱动请求任务转换为驱动任务流,并添加到流任务队列中;7.基于驱动层返回的驱动应答任务,对所述流任务队列中的所述驱动任务流进行驱动分发;8.从所述驱动层中匹配分发后的驱动来对所述驱动任务流进行处理。9.可选的,所述方法还包括:10.在初始化阶段,获取各个驱动的驱动id、驱动负载查询函数、驱动消息处理函数以及驱动任务完成状态的申请以及释放函数;11.根据所述驱动的驱动id、驱动负载查询函数、驱动处理函数以及驱动任务完成状态的申请以及释放函数,对所述驱动进行注册,得到驱动信息;12.将所述驱动信息存放在驱动信息表中,所述驱动信息表中的驱动信息根据所述驱动负载查询函数、驱动处理函数以及驱动任务完成状态的申请以及释放函数实时更新。13.可选的,所述基于所述控制任务,将所述驱动请求任务转换为驱动任务流,并添加到流任务队列中,包括:14.基于所述控制任务,在创建流任务队列时,判断待创建流任务队列的数量是否超过第一数量阈值;15.若所述待创建流任务队列的数量不超过所述第一数量阈值,则创建新的流任务队列;16.将所述驱动请求任务按预设的转化规则强制转换为驱动任务流,并按先进先出的规则添加到所述新的流任务队列中。17.可选的,所述方法还包括:18.基于所述控制任务,在销毁流任务队列时,判断待销毁的流任务队列中是否存在未完成的驱动任务流;19.若所述待销毁的流任务队列中存在未完成的驱动任务流,和/或若所述待创建流任务队列的数量超过所述第一数量阈值,则返回第一失败信息到应用层;20.基于所述控制任务,判断所述流任务队列中驱动任务流的数量是否超过第二数量阈值;21.若所述流任务队列中驱动任务流的数量超过第二数量阈值,则堵塞所述应用层的任务,并返回第二失败信息到应用层。22.可选的,所述基于驱动层返回的驱动应答任务,对所述流任务队列中的所述驱动任务流进行驱动分发,包括:23.从所述流任务队列中取出所述驱动任务流;24.根据驱动层返回的驱动应答任务,调用所述驱动负载查询函数以及所述驱动任务完成状态的申请以及释放函数,返回所述驱动任务流所需要的驱动的驱动状态;25.若所述驱动状态为可用,则将所述驱动任务流标记为进入等待驱动完成状态,并在返回驱动状态为可执行时,将所述驱动任务流切换到可执行状态;26.若所述驱动状态为不可用,则将所述驱动任务流标记为进入等待驱动资源可用状态;27.实时或实时遍历所述等待驱动资源可用状态的驱动任务流,并调用驱动负载查询函数查询对应驱动的负载状态,若所述负载状态符合预设的可执行条件,则将对应的等待驱动资源可用状态的驱动任务流切换到可执行状态。28.可选的,所述从驱动层中匹配分发后的驱动来对所述流进行处理,包括:29.在驱动层中匹配执行所述可执行状态的驱动任务流所需要的可执行驱动;30.调用所述驱动处理函数将可执行状态的驱动任务流转发到所述可执行驱动进行处理。31.可选的,所述方法还包括:32.将获取到的所述待处理任务保留到预设的任务队列中;33.判断所述待处理任务对应的所述驱动任务流是否完成处理;34.若所述驱动任务流完成处理,则从所述预设的任务队列中将所述待处理任务进行释放;35.若所述驱动任务流没有完成处理,则继续扣留所述待处理任务在所述预设的任务队列中。36.第二方面,本发明实施例提供一种任务处理装置,所述装置包括:37.第一获取模块,用于从应用层中获取待处理任务,所述待处理任务包括控制任务以及驱动请求任务;38.转换模块,用于基于所述控制任务,将所述驱动请求任务转换为驱动任务流,并添加到流任务队列中;39.驱动分发模块,用于基于驱动层返回的驱动应答任务,对所述流任务队列中的所述驱动任务流进行驱动分发;40.匹配模块,用于从驱动层中匹配分发后的驱动来对所述驱动任务流进行处理。41.第三方面,本发明实施例提供一种任务处理系统,所述系统包括:应用层、流调度层以及驱动层,其中,所述应用层用于生成待处理任务以及接收任务处理结果,所述驱动层用于提供驱动以对所述待处理任务进行计算以及返回驱动应答任务,所述流调度层用于实现本发明实施例提供的任务处理方法中的步骤。42.第四方面,本发明实施例提供一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例提供的任务处理方法中的步骤。43.第五方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现发明实施例提供的任务处理方法中的步骤。44.本发明实施例中,从应用层中获取待处理任务,所述待处理任务包括控制任务、驱动请求任务以及驱动应答任务;基于所述控制任务,将所述驱动请求任务转换为驱动任务流,并添加到流任务队列中;基于所述驱动应答任务,对所述流任务队列中的所述驱动任务流进行驱动分发;从驱动层中匹配分发后的驱动来对所述驱动任务流进行处理。通过将驱动请求任务转换为驱动任务流,使得多线程之间的调度转换为流之间的调度,利用流任务队列和驱动分发来实现驱动任务流之间的调度,由于通过流任务队列调度,相比于多线程之间的直接调度,系统调度开销降低了。另外,通过流任务队列将应用层与驱动层之间进行解耦,可以通过配置流任务队列和驱动来进行扩展。附图说明45.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。46.图1是本发明实施例提供的一种任务处理系统的架构图;47.图2是本发明实施例提供的一种流调度的状态示意图;48.图3是本发明实施例提供的一种任务处理方法的流程图;49.图4是本发明实施例提供的一种任务处理装置的结构示意图;50.图5是本发明实施例提供的另一种任务处理装置的结构示意图;51.图6是本发明实施例提供的一种转换模块的结构示意图;52.图7是本发明实施例提供的另一种任务处理装置的结构示意图;53.图8是本发明实施例提供的一种驱动分发模块的结构示意图;54.图9是本发明实施例提供的一种匹配模块的结构示意图;55.图10是本发明实施例提供的另一种任务处理装置的结构示意图;56.图11是本发明实施例提供的一种电子设备的结构示意图。具体实施方式57.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。58.请参见图1,图1是本发明实施例提供的一种任务处理系统的架构图,如图1所示,该任务处理系统包括:应用层、流调度层以及驱动层,其中,上述应用层包括一个或多个应用线程,上述流调度层包括一个或多个流调度线程,上述驱动层包括多个驱动。59.在本发明实施例中,上述应用层用于生成待处理任务以及接收任务处理结果,上述驱动层用于提供驱动以对上述待处理任务进行计算以及返回驱动应答任务。上述流调度层用于从应用层中获取待处理任务,上述待处理任务包括控制任务以及驱动请求任务;基于上述控制任务,将上述驱动请求任务转换为驱动任务流,并添加到流任务队列中;基于上述驱动应答任务,对上述流任务队列中的上述驱动任务流进行驱动分发;从驱动层中匹配分发后的驱动来对上述驱动任务流进行处理。需要说明的是,上述驱动请求任务也可以称为驱动任务。60.具体的,上述流调度线程包括待处理任务队列、任务分发单元、流控制管理单元、流任务队列、流调度单元、驱动分发单元、驱动信息存储单元、驱动信息注册单元。其中,上述驱动信息存储单元可以是以驱动信息表的形式。61.其中,上述待处理任务队列的输入与上述应用线程的输出连接,以及上述待处理任务队列的输入与上述驱动层的输出连接用于返回驱动应答任务,述待处理任务队列通过将应用线程产生的待处理任务和驱动应答任务按先进先出的规则进行存储,上述任务分发单元的输入与上述待处理任务队列的输出连接,上述任务分发单元用于将待处理任务分发到流控制管理单元、流任务队列和流调度单元。上述流调度单元的输出与驱动分发单元的输入连接,上述驱动分发单元用于查询驱动存储单元中的信息,并且上述驱动分发单元的输出与上述驱动层的输入连接。上述驱动信息注册单元用于对驱动层中的驱动进行注册,并将各个驱动的注册信息存储到上述驱动存储单元中。62.进一步的,上述任务分发单元根据上述待处理任务队列中的任务类型进行下发,上述待处理任务队列中的任务类型包括待处理任务类型以及驱动应答任务类型,其中上述待处理任务类型可以分为控制任务以及驱动请求任务两种。具体的,上述任务分发单元将控制任务分发到流控制管理单元,上述任务分发单元将驱动请求任务分发到流任务队列,上述任务分发单元将驱动应答任务分发到流调度单元。63.其中,上述控制任务主要是流的创建和销毁命令,控制任务由上述任务分发单元转发给流控制管理单元进行处理。进一步的,上述流控制管理单元根据上述控制任务进行流创建和销毁。64.可选的,上述流控制管理单元在进行流创建的时候,可以检测流的最大数量,若创建的流任务队列的最大数量超过预设的创建数量阈值时,则向应用层返回失败;上述流控制管理单元在进行流任务队列销毁的时候,可以检测是否存在未完成的驱动任务流,若存在未完成的驱动任务流,则向应用层返回失败;同时,上述流控制管理单元还可以实时检测上述流任务队列的驱动任务流数是否超过预设的任务数量阈值,若超过,则可以触发上层流控,堵塞应用层的应用线层。65.上述驱动请求任务主要是上层用户通过流调度单元请求驱动处理计算的任务,根据任务所在的流,写入到流任务队列对应流的尾部,以得到先进先出的流。66.可选的,上述流调度单元在收到驱动请求任务以及驱动应答任务后,则会触发流的任务调度。上述流调度单元可以采用状态机进行实现,具体的,上述状态机将流调度过程中的流包括可执行状态、等待驱动完成状态、等待驱动资源可用状态。67.上述驱动应答任务主要是驱动完成后通过驱动任务完成状态辅助信息发送到流调度单元,流调度单元触发后续流的驱动请求任务处理。68.上述驱动分发单元接收流调度单元的驱动请求任务,解析该驱动请求任务的driverid(驱动id),根据该驱动id在驱动存储单元中搜索到匹配的驱动注册信息。69.在一种可能的实施例中,上述流调度线程为一个,可以理解为上述流调度采用独立线程进行实现,通过上述独立的流调度线程将上述应用线程与驱动线程进行解耦,使得本发明实施例的上述任务处理系统可以通过配置流任务队列和驱动来进行扩展。70.进一步的,在采用独立线程实现流调度的情况下,可以并行调度预设数量的流任务队列,比如,并行调度1024个流任务队列,内部任意的耗时处理均会严重影响调度效率,流调度线程可以禁止执行其他任意的计算任务,驱动层可以设计为驱动线程,driver_register_table(驱动信息存储单元)内注册的通用驱动处理函数(也可以称为驱动任务处理函数)会把流调度中的驱动请求任务转发到驱动线程处理。71.可选的,请参见图2,图2是本发明实施例提供的一种流调度的状态示意图,如图2所示,通过上述流调度单元在进行调度处理时,可以从流任务队列的头部取出驱动任务流,交给上述驱动分发单元处理,上述驱动分发单元接收流调度单元的驱动任务流,解析该驱动请求任务的该驱动id,根据该驱动id在驱动存储单元中搜索到匹配的驱动注册信息,通过上述驱动分发单元调用驱动负载查询函数查询该驱动id对应驱动的负载状态。72.如果该驱动id对应驱动的负载高,说明该驱动id对应驱动处于忙状态,则将驱动状态为不可用(失败)返回到上述流调度单元,上述流调度单元则将该驱动任务流标记为等待驱动资源可用状态;如果该驱动id对应驱动的负载低,则说明该驱动id对应驱动处于可用状态,则将驱动状态为可用返回到上述流调度单元,上述流调度单元则将该驱动任务流标记为等待驱动完成状态,并记录该驱动任务流正在等待的驱动任务完成状态辅助信息(驱动状态为可执行),如果接收到驱动任务完成状态辅助信息,则找到等待该驱动任务完成状态辅助信息的驱动任务流,将该驱动任务流的状态切换可执行状态;进一步的,可以遍历所有等待驱动资源可用状态的驱动任务流,根据等待资源的驱动id,通过驱动分发单元调用驱动负载查询函数查询该驱动id对应驱动的负载状态,如果查询该驱动负载低,那么该驱动任务流状态由等待驱动资源可用状态切换到可执行状态。73.上述驱动分发单元可以为驱动任务流分配驱动任务完成状态辅助信息资源,并调用驱动处理函数控制驱动对上述驱动任务流进行处理。74.在本发明实施例中,上述任务处理系统通过将驱动请求任务转换为驱动任务流,使得多线程之间的调度转换为流之间的调度,利用流任务队列和驱动分发来实现驱动任务流之间的调度,由于通过流任务队列调度,相比于多线程之间的直接调度,系统调度开销降低了。另外,通过流任务队列将应用层与驱动层之间进行解耦,可以通过配置流任务队列和驱动来进行扩展。75.请参见图3,图3是本发明实施例提供的一种任务处理方法的流程图,上述任务处理方法可以应用于上述图1实施例的任务处理系统,如图3所示,该任务处理方法包括以下步骤:76.301、从应用层中获取待处理任务。77.在本发明实施例中,上述待处理任务可以是需要并行计算的任务,上述待处理任务包括控制任务以及驱动请求任务。78.上述应用层包括一个或多个应用线程,上述应用线程通过用户交互产生对应的待处理任务。上述控制任务主要是驱动任务流的创建和销毁命令,控制任务由上述任务分发单元转发给流控制管理单元进行处理。上述驱动请求任务主要是上层用户通过流调度单元请求驱动处理计算的任务,根据驱动请求任务任务所在的流任务队列,将驱动任务流写入到对应流任务队列的尾部,以得到先进先出的流。上述驱动应答任务主要是驱动完成后通过驱动任务完成状态辅助信息生成的,根据驱动应答任务,流调度单元可以触发后续流的驱动请求任务处理。79.更进一步的,上述驱动请求任务中包括该任务对应的驱动id,上述流调度层包括一个或多个流调度线程,上述驱动层包括多个驱动线程(驱动线程也可以称为驱动),上述驱动请求任务在应用线程、流调度线程和驱动线程之间以流数据的形式进行传递。80.302、基于控制任务,将驱动请求任务转换为驱动任务流,并添加到流任务队列中。81.在本发明实施例中,上述控制任务通过上述流调度层进行处理,上述流调度层通过上述控制任务进行驱动任务流的创建和销毁,并将上述驱动请求任务转换为驱动任务流;将上述驱动请求任务转换为驱动任务流可以采用强制转换的方式进行,从而将应用线程的数据格式转换为流数据格式,得到上述驱动任务流。82.进一步的,可以基于上述控制任务,在创建流任务队列时,判断待创建流任务队列的数量是否超过第一数量阈值;若上述待创建流任务队列的数量不超过上述第一数量阈值,则创建新的流任务队列;将上述驱动请求任务按预设的转化规则强制转换为驱动任务流,并按先进先出的规则添加到上述新的流任务队列中。83.更进一步的,可以基于上述控制任务,在销毁流任务队列时,判断待销毁的流任务队列中是否存在未完成的驱动任务流;若上述待销毁的流任务队列中存在未完成的驱动请求任务流,和/或若上述待创建流任务队列的数量超过上述第一数量阈值,则返回第一失败信息到应用层;基于上述控制任务,判断上述流任务队列中驱动任务流的数量是否超过第二数量阈值;若上述流任务队列中驱动任务流的数量超过第二数量阈值,则堵塞上述应用层的任务,并返回第二失败信息到应用层。84.具体的,当待销毁的流任务队列中存在未完成的驱动请求任务流时,则说明上一个任务还没有执行完成,需要继续进行执行;上述待创建流任务队列的数量超过上述第一数量阈值,则说明在流调度层中的并行的流任务队列达到承载上限。85.上述第一失败信息包括创建失败信息和销毁失败信息。上述创建失败信息可以用于向用户提示流任务队列创建失败,上述销毁失败信息可以用于向用户提示流任务队列销毁失败。86.上述第一数量阈值可以理解为流任务队列并行的最大数量,在本发明实施例中,上述第一数量阈值优选为1024。在创建流任务队列时,判断待创建流任务队列的数量是否超过1024;若上述待创建流任务队列的数量不超过1024,则创建新的流任务队列,若上述待创建流任务队列的数量超过1024,则返回创建失败信息。在销毁流任务队列时,若检测到流任务队列中还存在驱动任务流,说明该流任务队列中存在未完成的驱动任务流,则返回销毁失败信息。87.上述第二数量阈值可以理解为一个流任务队列中驱动任务流的最大流数据量,上述流任务队列中驱动任务流的数据量超过流任务队列的最大流数据量,则堵塞上述应用层的任务,并返回第二失败信息到应用层。88.303、基于驱动层返回的驱动应答任务,对流任务队列中的驱动任务流进行驱动分发。89.在本发明实施例中,在驱动完成后可以通过驱动任务完成状态辅助信息生成对应的驱动应答任务,将添加到待处理任务队列中,被任务分发单元分发到从而向流调度单元通知对应驱动的负载状态,以使流调度单元触发后的驱动请求任务处理。90.可选的,上述流调度单元可以从上述流任务队列中取出上述驱动任务流;根据上述驱动应答任务,调用上述驱动负载查询函数以及上述驱动任务完成状态的申请以及释放函数,返回上述驱动任务流所需要的驱动的驱动状态;若上述驱动状态为可用,则将上述驱动任务流标记为进入等待驱动完成状态,并在返回驱动状态为可执行时,将上述驱动任务流切换到可执行状态;若上述驱动状态为不可用,则将上述驱动任务流标记为等待驱动资源可用状态;实时或实时遍历上述等待驱动资源可用状态的驱动任务流,并调用驱动负载查询函数查询对应驱动的负载状态,若上述负载状态符合预设的可执行条件,则将对应的等待驱动资源可用状态的驱动任务流切换到可执行状态。91.在本发明实施例中,可以遍历所有可执行状态的驱动任务流,并从对应流任务队列的头部取出驱动任务流,交给上述驱动分发单元处理,上述驱动分发单元接收流调度单元的驱动任务流,解析该驱动请求任务的该驱动id,根据该驱动id在驱动存储单元中搜索到匹配的驱动注册信息,通过上述驱动分发单元调用驱动负载查询函数查询该驱动id对应驱动的负载状态。92.如果该驱动id对应驱动的负载高,说明该驱动id对应驱动处于忙状态,则将驱动状态为不可用(失败)返回到上述流调度单元,上述流调度单元则将该驱动任务流标记为等待驱动资源可用状态;如果该驱动id对应驱动的负载低,则说明该驱动id对应驱动处于可用状态,则将驱动状态为可用返回到上述流调度单元,上述流调度单元则将该驱动任务流标记为等待驱动完成状态,并记录该驱动任务流正在等待的驱动任务完成状态辅助信息(驱动状态为可执行),如果接收到驱动任务完成状态辅助信息,则找到等待该驱动任务完成状态辅助信息的驱动任务流,将该驱动任务流的状态切换可执行状态;进一步的,可以遍历所有等待驱动资源可用状态的驱动任务流,根据等待资源的驱动id,通过驱动分发单元调用驱动负载查询函数查询该驱动id对应驱动的负载状态,如果查询该驱动负载低,那么该驱动任务流状态由等待驱动资源可用状态切换到可执行状态。93.304、从驱动层中匹配分发后的驱动来对所述驱动任务流进行处理。94.在本发明实施例中,上述在驱动层中匹配执行上述可执行状态的驱动任务流所需要的可执行驱动;调用上述驱动处理函数将可执行状态的驱动任务流转发到上述可执行驱动进行处理。95.进一步的,上述驱动层中的驱动线程可以通过上述驱动信息注册单元进行注册,然后存储到上述驱动信息存储单元。在初始化阶段,获取各个驱动的驱动id、驱动负载查询函数、驱动消息处理函数以及驱动任务完成状态的申请以及释放函数;根据所述驱动的驱动id、驱动负载查询函数、驱动处理函数以及驱动任务完成状态的申请以及释放函数,对所述驱动进行注册,得到驱动信息;将所述驱动信息存放在驱动信息表中,所述驱动信息表中的驱动信息根据所述驱动负载查询函数、驱动处理函数以及驱动任务完成状态的申请以及释放函数实时更新。96.其中,上述驱动任务完成状态的申请以及释放函数用于处理上述驱动任务完成状态辅助信息。上述驱动负载查询函数用于查询驱动层中各个驱动线程的负载情况,上述驱动处理函数用于调用驱动层中对应的驱动线程对驱动任务流进行处理。上述驱动任务完成状态辅助信息还包括资源释放请求,驱动分发单元在接收到驱动应答任务后,若驱动应答任务对应的驱动任务完成状态辅助信息为资源释放请求,则会释放对驱动应答任务对应的驱动任务流的资源。97.具体的,每个驱动请求任务在下发时,都会分配一个驱动任务完成状态辅助信息的对应资源,当驱动请求任务完成后,通过该驱动任务完成状态辅助信息通知流调度单元,流调度单元根据该驱动任务完成状态辅助信息进行高度,并在完成后释放该驱动任务完成状态辅助信息的对应资源。98.在本发明实施例中,通过将驱动请求任务转换为驱动任务流,使得多线程之间的调度转换为流之间的调度,利用流任务队列和驱动分发来实现驱动任务流之间的调度,由于通过流任务队列调度,相比于多线程之间的直接调度,系统调度开销降低了。另外,通过流任务队列将应用层与驱动层之间进行解耦,可以通过配置流任务队列和驱动来进行扩展。99.可选的,在一种可能的实施例中,上述流调度线程为一个,可以理解为上述流调度采用独立线程进行实现,通过上述独立的流调度线程将上述应用线程与驱动线程进行解耦,使得本发明实施例的上述任务处理系统可以通过配置流任务队列和驱动来进行扩展。100.进一步的,在采用独立线程实现流调度的情况下,可以并行调度预设数量的流任务队列,比如,并行调度1024个流任务队列,内部任意的耗时处理均会严重影响调度效率,流调度线程可以禁止执行其他任意的计算任务,驱动层可以设计为驱动线程,driver_register_table(驱动信息存储单元)内注册的通用驱动处理函数(也可以称为驱动任务处理函数)会把流调度中的驱动请求任务转发到驱动线程处理。101.在一种可能的实施例中,上述驱动请求任务在应用线程、流调度线程和驱动线程之间传递,为了减少驱动请求任务存储管理开销,相关数据结构定义方法如下:定义通用驱动消息drvcommontask:通用驱动消息中包括driverid,driverevent等信息;定义各自驱动消息:按驱动id定义各自驱动消息,比如驱动a的drvtaska1消息,消息头drvtaska1::header为drvcommontask类型,后续drvtaska1::body存放驱动a具体参数配置消息。102.具体的,以drvtaska1为例对相关数据的存储进行说明:1)上层用户在应用线程中创建drvtaska1对象,下发给流调度线程处理;2)流调度线程在收到驱动请求任务后,强转为通用驱动消息drvcommontask处理;处理期间不删除该驱动请求任务对象,而是直接转发给驱动a线程处理;3)驱动a线程收到该驱动请求任务任务后,强转为drvtaska1类型处理,处理完毕后释放该驱动请求任务。这样,可以减少驱动请求任务存储管理开销。103.在一种可能的实施例中,可以将获取到的上述待处理任务保留到预设的任务队列中;判断上述待处理任务对应的上述驱动任务流是否完成处理;若上述驱动任务流完成处理,则从上述预设的任务队列中将上述待处理任务进行释放;若上述驱动任务流没有完成处理,则继续扣留上述待处理任务在上述预设的任务队列中。这样,可以保证驱动任务流的处理过程中,出现问题时可以对上述待处理任务进行复用,不需要再到应用层中查找对应的待处理任务。104.需要说明的是,本发明实施例提供的任务处理方法可以应用于可以进行任务处理的智能手机、电脑、服务器等设备。105.可选的,请参见图4,图4是本发明实施例提供的一种任务处理装置的结构示意图,如图4所示,所述装置包括:106.第一获取模块401,用于从应用层中获取待处理任务,所述待处理任务包括控制任务以及驱动请求任务;107.转换模块402,用于基于所述控制任务,将所述驱动流请求任务转换为驱动任务流,并添加到流任务队列中;108.驱动分发模块403,用于基于驱动层返回的驱动应答任务,对所述流任务队列中的所述驱动任务流进行驱动分发;109.匹配模块404,用于从驱动层中匹配分发后的驱动来对所述驱动任务流进行处理。110.可选的,如图5所示,所述装置还包括:111.第二获取模块405,用于在初始化阶段,获取各个驱动的驱动id、驱动负载查询函数、驱动消息处理函数以及驱动任务完成状态的申请以及释放函数;112.注册模块406,用于根据所述驱动的驱动id、驱动负载查询函数、驱动处理函数以及驱动任务完成状态的申请以及释放函数,对所述驱动进行注册,得到驱动信息;113.存储模块407,用于将所述驱动信息存放在驱动信息表中,所述驱动信息表中的驱动信息根据所述驱动负载查询函数、驱动处理函数以及驱动任务完成状态的申请以及释放函数实时更新。114.可选的,如图6所示,所述转换模块402包括:115.判断子模块4021,用于基于所述控制任务,在创建流任务队列时,判断待创建流任务队列的数量是否超过第一数量阈值;116.创建子模块4022,用于若所述待创建流任务队列的数量不超过所述第一数量阈值,则创建新的流任务队列;117.转换子模块4023,用于将所述驱动请求任务按预设的转化规则强制转换为驱动任务流,并按先进先出的规则添加到所述新的流任务队列中。118.可选的,如图7所示,所述装置还包括:119.第一判断模块408,用于基于所述控制任务,在销毁流任务队列时,判断待销毁的流任务队列中是否存在未完成的驱动任务流;120.第一返回模块409,用于若所述待销毁的流任务队列中存在未完成的驱动任务流,和/或若所述待创建流任务队列的数量超过所述第一数量阈值,则返回第一失败信息到应用层;121.第二判断模块410,用于基于所述控制任务,判断所述流任务队列中驱动任务流的数量是否超过第二数量阈值;122.第二返回模块411,用于若所述流任务队列中驱动任务流的数量超过第二数量阈值,则堵塞所述应用层的任务,并返回第二失败信息到应用层。123.可选的,如图8所示,所述驱动分发模块404包括:124.取出子模块4041,用于从所述流任务队列中取出所述驱动任务流;125.第一调用子模块4042,用于根据驱动层返回的驱动应答任务,调用所述驱动负载查询函数以及所述驱动任务完成状态的申请以及释放函数,返回所述驱动任务流所需要的驱动的驱动状态;126.第一状态子模块4043,用于若所述驱动状态为可用,则将所述驱动任务流标记为进入等待驱动完成状态,并在返回驱动状态为可执行时,将所述驱动任务流切换到可执行状态;127.第二状态子模块4044,用于若所述驱动状态为不可用,则将所述驱动任务流标记为进入等待驱动资源可用状态;128.第三状态子模块4045,用于实时或实时遍历所述等待驱动资源可用状态的驱动任务流,并调用驱动负载查询函数查询对应驱动的负载状态,若所述负载状态符合预设的可执行条件,则将对应的等待驱动资源可用状态的驱动任务流切换到可执行状态。129.可选的,如图9所示,所述匹配模块405包括:130.匹配子模块4051,用于在驱动层中匹配执行所述可执行状态的驱动任务流所需要的可执行驱动;131.第二调用子模块4052,用于调用所述驱动处理函数将可执行状态的驱动任务流转发到所述可执行驱动进行处理。132.可选的,如图10所示,所述装置还包括:133.保留模块412,用于将获取到的所述待处理任务保留到预设的任务队列中;134.第三判断模块413,用于判断所述待处理任务对应的所述驱动任务流是否完成处理;135.释放模块414,用于若所述驱动任务流完成处理,则从所述预设的任务队列中将所述待处理任务进行释放;136.扣留模块415,用于若所述驱动任务流没有完成处理,则继续扣留所述待处理任务在所述预设的任务队列中。137.需要说明的是,本发明实施例提供的任务处理装置可以应用于可以进行任务处理的智能手机、电脑、服务器等设备。138.本发明实施例提供的任务处理装置能够实现上述方法实施例中任务处理方法实现的各个过程,且可以达到相同的有益效果。为避免重复,这里不再赘述。139.参见图11,图11是本发明实施例提供的一种电子设备的结构示意图,如图11所示,包括:存储器1102、处理器1101及存储在所述存储器1102上并可在所述处理器1101上运行的任务处理方法的计算机程序,其中:140.处理器1101用于调用存储器1102存储的计算机程序,执行如下步骤:141.从应用层中获取待处理任务,所述待处理任务包括控制任务以及驱动请求任务;142.基于所述控制任务,将所述驱动请求任务转换为驱动任务流,并添加到流任务队列中;143.基于驱动层返回的驱动应答任务,对所述流任务队列中的所述驱动任务流进行驱动分发;144.从驱动层中匹配分发后的驱动来对所述驱动任务流进行处理。145.可选的,处理器1101执行的所述方法还包括:146.在初始化阶段,获取各个驱动的驱动id、驱动负载查询函数、驱动消息处理函数以及驱动任务完成状态的申请以及释放函数;147.根据所述驱动的驱动id、驱动负载查询函数、驱动处理函数以及驱动任务完成状态的申请以及释放函数,对所述驱动进行注册,得到驱动信息;148.将所述驱动信息存放在驱动信息表中,所述驱动信息表中的驱动信息根据所述驱动负载查询函数、驱动处理函数以及驱动任务完成状态的申请以及释放函数实时更新。149.可选的,处理器1101执行的所述基于所述控制任务,将所述驱动请求任务转换为驱动任务流,并添加到流任务队列中,包括:150.基于所述控制任务,在创建流任务队列时,判断待创建流任务队列的数量是否超过第一数量阈值;151.若所述待创建流任务队列的数量不超过所述第一数量阈值,则创建新的流任务队列;152.将所述驱动请求任务按预设的转化规则强制转换为驱动任务流,并按先进先出的规则添加到所述新的流任务队列中。153.可选的,处理器1101执行的所述方法还包括:154.基于所述控制任务,在销毁流任务队列时,判断待销毁的流任务队列中是否存在未完成的驱动任务流;155.若所述待销毁的流任务队列中存在未完成的驱动任务流,和/或若所述待创建流任务队列的数量超过所述第一数量阈值,则返回第一失败信息到应用层;156.基于所述控制任务,判断所述流任务队列中驱动任务流的数量是否超过第二数量阈值;157.若所述流任务队列中驱动任务流的数量超过第二数量阈值,则堵塞所述应用层的任务,并返回第二失败信息到应用层。158.可选的,处理器1101执行的所述基于驱动层返回的驱动应答任务,对所述流任务队列中的所述驱动任务流进行驱动分发,包括:159.从所述流任务队列中取出所述驱动任务流;160.根据所述驱动应答任务,调用所述驱动负载查询函数以及所述驱动任务完成状态的申请以及释放函数,返回所述驱动任务流所需要的驱动的驱动状态;161.若所述驱动状态为可用,则将所述驱动任务流标记为进入等待驱动完成状态,并在返回驱动状态为可执行时,将所述驱动任务流切换到可执行状态;162.若所述驱动状态为不可用,则将所述驱动任务流标记为进入等待驱动资源可用状态;163.实时或实时遍历所述等待驱动资源可用状态的驱动任务流,并调用驱动负载查询函数查询对应驱动的负载状态,若所述负载状态符合预设的可执行条件,则将对应的等待驱动资源可用状态的驱动任务流切换到可执行状态。164.可选的,处理器1101执行的所述从驱动层中匹配分发后的驱动来对所述流进行处理,包括:165.在驱动层中匹配执行所述可执行状态的驱动任务流所需要的可执行驱动;166.调用所述驱动处理函数将可执行状态的驱动任务流转发到所述可执行驱动进行处理。167.可选的,处理器1101执行的所述方法还包括:168.将获取到的所述待处理任务保留到预设的任务队列中;169.判断所述待处理任务对应的所述驱动任务流是否完成处理;170.若所述驱动任务流完成处理,则从所述预设的任务队列中将所述待处理任务进行释放;171.若所述驱动任务流没有完成处理,则继续扣留所述待处理任务在所述预设的任务队列中。172.需要说明的是,本发明实施例提供的电子设备可以应用于可以进行任务处理的智能手机、电脑、服务器等设备。173.本发明实施例提供的电子设备能够实现上述方法实施例中任务处理方法实现的各个过程,且可以达到相同的有益效果。为避免重复,这里不再赘述。174.本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现本发明实施例提供的任务处理方法或应用端任务处理方法的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。175.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存取存储器(randomaccessmemory,简称ram)等。176.以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献