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

任务同步等待方法、装置、系统、电子设备及存储介质与流程

2022-02-20 12:54:04 来源:中国专利 TAG:
1.本发明涉及计算机
技术领域
:,尤其涉及一种任务同步等待方法、装置、系统、电子设备及存储介质。
背景技术
::2.随着计算机技术的发展,在解决大量数据计算的方面,通常会使用并行计算来提高计算速度,并行计算需要使用多种计算资源解决计算的问题,计算资源包括硬件加速单元、神经网络计算单元、cpu单元、dsp单元等。目前的并行计算调度主要是采用多线程和线程间消息队列来调度,但并行计算调度由于线程过多会造成操作系统调度开销过大,且需要多线程需要等待并行的完成,若增加计算单元来提高操作系统调度能力,由于软硬件之间的高度依赖,使得增加计算单元的过程繁琐,需要进行各种复杂配置,使得扩展难度高。因此,现有技术中,对于多线程计算资源的调度效率低。技术实现要素:3.本发明实施例提供一种任务同步等待方法,通过将待处理业务拆分为多个驱动任务,再将驱动任务转换为驱动任务流添加到多个流任务队列中,使得多线程之间的调度转换为流之间的调度,利用事件依赖来实现多个流任务队列的并行等待,从而实现基于流任务队列的任务同步等待,相比于多线程之间的直接调度,系统调度开销降低了。4.第一方面,本发明实施例提供一种任务同步等待方法,所述方法包括:5.将待处理业务拆分为第一数量的驱动任务,加入到第二数量的流任务队列中,所述第二数量的流任务队列之间为并行关系;6.对所述驱动任务添加事件依赖,所述事件依赖包括不同流任务队列之间的并行同步等待事件;7.执行所述事件依赖,使所述流任务队列实现并行同步等待。8.第二方面,本发明实施例提供一种任务同步等待装置,所述装置包括:9.拆分模块,用于将待处理业务拆分为第一数量的驱动任务,加入到第二数量的流任务队列中,所述第二数量的流任务队列之间为并行关系;10.添加模块,用于对所述驱动任务添加事件依赖,所述事件依赖包括不同流任务队列之间的并行同步等待事件;11.执行模块,用于执行所述事件依赖,使所述流任务队列实现并行同步等待。12.第三方面,本发明实施例提供一种任务同步等待系统,所述系统包括:应用层、流调度层以及驱动层,其中,所述应用层用于生成驱动任务以及接收驱动任务结果,所述驱动层用于提供驱动以对所述驱动任务进行计算,所述流调度层用于实现本发明实施例提供的任务同步等待方法中的步骤。13.第四方面,本发明实施例提供一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例提供的任务同步等待方法中的步骤。14.第五方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现发明实施例提供的任务同步等待方法中的步骤。15.本发明实施例中,将待处理业务拆分为第一数量的驱动任务,加入到第二数量的流任务队列中;对所述驱动任务添加事件依赖,所述事件依赖包括不同流任务队列之间的并行同步等待事件;执行所述事件依赖,使所述流任务队列实现并行同步等待。通过将待处理业务拆分为多个驱动任务,再将驱动任务转换为驱动任务流添加到多个流任务队列中,使得多线程之间的调度转换为流之间的调度,利用事件依赖来实现多个流任务队列的并行等待,从而实现基于流任务队列的任务同步等待,相比于多线程之间的直接调度,系统调度开销降低了。附图说明16.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。17.图1是本发明实施例提供的一种任务同步等待系统的架构图;18.图2是本发明实施例提供的一种流调度的状态示意图;19.图3是本发明实施例提供的另一种流调度的状态示意图;20.图4是本发明实施例提供的一种graph业务图的任务拆分示意图;21.图5是本发明实施例提供的一种graph业务图的并行流任务队列的示意图;22.图6是本发明实施例提供的一种任务同步等待方法的流程图;23.图7是本发明实施例提供的一种并行流任务队列创建事件依赖的示意图;24.图8是本发明实施例提供的一种clstream同步等待的示意图;25.图9是本发明实施例提供的一种clevent同步等待的示意图;26.图10是本发明实施例提供的一种任务同步等待装置的结构示意图;27.图11是本发明实施例提供的一种电子设备的结构示意图。具体实施方式28.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。29.请参见图1,图1是本发明实施例提供的一种任务同步等待系统的架构图,如图1所示,该任务同步等待系统包括:应用层、流调度层以及驱动层,其中,上述应用层包括一个或多个应用线程,上述流调度层包括一个或多个流调度线程,上述驱动层包括多个驱动。30.在本发明实施例中,上述应用线程包括应用模块以及接口模块clapi,其中,上述接口模块clapi包括clsignal(computinglanguagesignal)线程管理接口单元、clstream(computinglanguagestream)流管理接口单元以及clevent(computinglanguageevent)事件管理接口单元,上述clsignal线程管理单元用于多线程之间同步等待;上述clstream流管理单元用于提供流任务队列的创建、销毁管理接口;上述clevent管理单元用于并行计算间的同步等待。其中,上述clevent管理单元包括schedevent(schedulerevent)调度事件,调度事件用于流调度单元同步状态,一个clevent管理单元可以对应多个schedevent调度事件。31.上述应用层根据待处理业务生成对应的驱动任务以及驱动任务结果,并通过接口模块向上述流调度层发送对应的管理指令。上述驱动层用于提供驱动以对上述驱动任务进行计算以及返回驱动应答任务到任务分发单元。上述流调度层用于从应用层中获取驱动任务,上述驱动任务包括控制任务以及驱动请求任务;基于上述控制任务,将上述驱动请求任务转换为驱动任务流,并添加到流任务队列中;基于上述驱动应答任务,对上述流任务队列中的上述驱动任务流进行驱动分发;从驱动层中匹配分发后的驱动来对上述驱动任务流进行处理,并返回驱动应答任务到上述流调度层。32.具体的,上述流调度线程包括任务队列、任务分发单元、流控制管理单元、流任务队列、流调度单元、驱动分发单元、驱动信息存储单元、驱动信息注册单元、事件数据库单元、event管理单元。其中,上述驱动信息存储单元可以是驱动信息表的形式,上述事件数据库单元可以是事件信息表的形式。33.其中,上述任务队列的输入与上述应用线程的输出连接,用于将应用线程产生的驱动任务、驱动层返回的驱动应答任务、clsignal线程管理接口单元和clevent事件管理接口单元生成的事件任务按先进先出的规则进行存储,上述任务分发单元的输入与上述任务队列的输出连接,上述任务分发单元用于将任务队列中的各个任务分发到流控制管理单元、流任务队列、流调度单元以及event管理单元。上述流调度单元的输出与驱动分发单元的输入连接,上述驱动分发单元用于查询驱动存储单元中的信息,并且上述驱动分发单元的输出与上述驱动层的输入连接。上述驱动信息注册单元用于对驱动层中的驱动进行注册,并将各个驱动的注册信息存储到上述驱动存储单元中。34.上述clsignal线程管理接口单元与上述clevent事件管理接口单元生成对应的事件任务和事件控制指令,其中,上述事件任务被强制转换为流数据添加到任务队列中,通过任务分发单元分发到流任务队列中,上述事件控制指令通过任务分发单元分发到event事件管理单元。35.进一步的,上述任务分发单元根据任务列表中的任务类型进行下发,具体的,上述任务类型包括驱动任务类型、驱动应答任务、事件任务类型、事件控制指令类型,上述驱动任务类型包括控制任务、驱动请求任务,其中,上述控制任务也可以称为流控制指令,上述任务分发单元将上述驱动请求任务和事件任务分发到流任务队列中,上述任务分发单元将上述控制任务分发到流控制管理单元中,上述任务分发单元将驱动应答任务分发到流调度单元中,上述任务分发单元将上述事件控制指令发送到event事件管理单元。36.其中,上述控制任务主要是流的创建和销毁命令,控制任务由上述任务分发单元转发给流控制管理单元进行处理。进一步的,上述流控制管理单元根据上述控制任务进行流创建和销毁。37.可选的,上述流控制管理单元在进行流创建的时候,可以检测流的最大数量,若创建的流任务队列的最大数量超过预设的创建数量阈值时,则向应用层返回失败;上述流控制管理单元在进行流任务队列销毁的时候,可以检测是否存在未完成的驱动任务流,若存在未完成的驱动任务流,则向应用层返回失败;同时,上述流控制管理单元还可以实时检测上述流任务队列的驱动任务流数是否超过预设的任务数量阈值,若超过,则可以触发上层流控,堵塞应用层的应用线层。38.上述驱动请求任务主要是上层用户通过流调度单元请求驱动处理计算的任务,根据任务所在的流任务队列,将该驱动请求任务写入到该流任务队列的尾部,以得到先进先出的流。39.可选的,上述流调度单元在收到驱动请求任务、事件任务以及驱动应答任务后,则会触发流的任务调度。上述流调度单元可以采用状态机进行实现,具体的,上述状态机将流调度过程中的流包括可执行状态、等待驱动完成状态、等待驱动资源可用状态、等待事件完成状态。40.上述驱动应答任务主要是驱动完成后通过驱动任务完成状态辅助信息发送到流调度单元,流调度单元触发后续流的驱动请求任务处理。41.上述驱动分发单元接收流调度单元的驱动请求任务,解析该驱动请求任务的driverid(驱动id),根据该驱动id在驱动存储单元中搜索到匹配的驱动注册信息。42.在一种可能的实施例中,上述流调度线程为一个,可以理解为上述流调度采用独立线程进行实现,通过上述独立的流调度线程将上述应用线程与驱动线程进行解耦,使得本发明实施例的上述任务同步等待系统可以通过配置流任务队列和驱动来进行扩展。43.进一步的,在采用独立线程实现流调度的情况下,可以并行调度预设数量的流任务队列,比如,并行调度1024个流任务队列,内部任意的耗时处理均会严重影响调度效率,流调度线程可以禁止执行其他任意的计算任务,驱动层可以设计为驱动线程,driver_register_table(驱动信息存储单元)内注册的通用驱动处理函数(也可以称为驱动任务同步等待函数)会把流调度中的驱动请求任务转发到驱动线程处理。44.可选的,请参见图2,图2是本发明实施例提供的一种流调度的状态示意图,如图2所示,通过上述流调度单元在进行调度处理时,可以从流任务队列的头部取出驱动任务流,交给上述驱动分发单元处理,上述驱动分发单元接收流调度单元的驱动任务流,解析该驱动请求任务的该驱动id,根据该驱动id在驱动存储单元中搜索到匹配的驱动注册信息,通过上述驱动分发单元调用驱动负载查询函数查询该驱动id对应驱动的负载状态。45.如果该驱动id对应驱动的负载高,说明该驱动id对应驱动处于忙状态,则将驱动状态为不可用(失败)返回到上述流调度单元,上述流调度单元则将该驱动任务流标记为等待驱动资源可用状态;如果该驱动id对应驱动的负载低,则说明该驱动id对应驱动处于可用状态,则将驱动状态为可用返回到上述流调度单元,上述流调度单元则将该驱动任务流标记为等待驱动完成状态,并记录该驱动任务流正在等待的驱动任务完成状态辅助信息(驱动状态为可执行),如果接收到驱动任务完成状态辅助信息,则找到等待该驱动任务完成状态辅助信息的驱动任务流,将该驱动任务流的状态切换可执行状态;进一步的,可以遍历所有等待驱动资源可用状态的驱动任务流,根据等待资源的驱动id,通过驱动分发单元调用驱动负载查询函数查询该驱动id对应驱动的负载状态,如果查询该驱动负载低,那么该驱动任务流状态由等待驱动资源可用状态切换到可执行状态。46.上述驱动分发单元可以为驱动任务流分配驱动任务完成状态辅助信息资源,并调用驱动处理函数控制驱动对上述驱动任务流进行处理。47.可选的,请参见图3,图3是本发明实施例提供的另一种流调度的状态示意图,如图3所示,通过上述流调度单元在进行调度处理时,在图2的基础上,上述状态机还增加了等待事件完成状态扩展,若驱动任务对应的事件任务未准备,则驱动任务被标记为等待事件完成状态,若驱动任务对应的事件任务准备完成,则驱动任务被标记为可执行状态。48.在本发明实施例中,基于上述任务同步等待系统,主要包括三个部分,分别是1):多个流任务队列间的同步,用于在流调度单元解决多个流任务队列之间的任务依赖;2):clstream同步等待,用于等待指定流任务队列内所有任务完成;3):clevent同步等待,用于等待指定流任务队列调度执行完指定clevent。49.在本发明实施例中,可以将待处理业务拆分为第一数量的驱动任务,加入到第二数量的流任务队列中,上述第二数量的流任务队列之间为并行关系;对上述驱动任务添加事件依赖,上述事件依赖包括不同流任务队列之间的并行同步等待事件;执行上述事件依赖,使上述流任务队列实现并行同步等待。以graph业务图为例对三个部分进行阐述,具体的,请参考图4,图4是本发明实施例提供的一种graph业务图的任务拆分示意图,如图4所示,一个graph业务被拆分为a1、b1、c1、a2、b2、c2、a3、c3等8个驱动任务,其中,b1和c1为并行的,a3和c2为并行的。事件依赖的添加请参考图5,图5是本发明实施例提供的一种graph业务图的并行流任务队列的示意图,如图5所示,并行流任务队列包括流任务队列streama、流任务队列streamb、流任务队列streamc,其中,各个stream流任务队列之间通过事件任务evente1和事件任务evente2同步,事件任务event的record记录事件和wait等待事件操作用于stream之间的同步。比如:streama开始位置为a1驱动任务,紧接事件任务e1的record记录事件,而streamb和streamc在开始位置均通过事件任务e1的wait等待事件来等待该事件任务e1的完成,后续跟着各自的驱动任务b1,c1;此处只有等streama执行到e1record任务(a1任务已经完成),更新e1状态,才触发streamb和c调度(等待e1)。50.在本发明实施例中,上述任务同步等待系统通过将待处理业务拆分为多个驱动任务,再将驱动任务转换为驱动任务流添加到多个流任务队列中,使得多线程之间的调度转换为流之间的调度,利用事件依赖来实现多个流任务队列的并行等待,从而实现基于流任务队列的任务同步等待,相比于多线程之间的直接调度,系统调度开销降低了。51.请参见图6,图6是本发明实施例提供的一种任务同步等待方法的流程图,上述任务同步等待方法可以应用于上述图1实施例的任务同步等待系统,如图6所示,该任务同步等待方法包括以下步骤:52.601、将待处理业务拆分为第一数量的驱动任务,加入到第二数量的流任务队列中。53.在本发明实施例中,上述第二数量的流任务队列之间为并行关系。上述待处理业务可以是硬件加速处理、神经网络处理、cpu计算处理、dsp计算任务等处理。54.进一步的,可以根据待处理业务的总数据量,确定流任务队列的第二数量;将待处理业务拆分为第一数量的驱动任务,并通过上述流任务队列配置驱动任务之间的并行和串行关系;将并行的驱动任务对应添加到并行的流任务队列中,并在流任务队列中配置串行的驱动任务。55.具体的,可以先确定每个流任务队列的数据吞吐量和每个驱动任务的数据量,根据待处理业务的总数据量除以总处理周期内每个流任务队列的数据吞吐量,确定流任务队列的第二数量。在一种可能的实施例中,根据每个流任务队列的数据吞吐量除以每个驱动任务的数据量,从而确定每个流队列在一轮处理周期内的驱动任务数量,计算总处理周期驱动任务数量作为第一数量。56.602、对驱动任务添加事件依赖。57.在本发明实施例中,上述事件依赖包括不同流任务队列之间的并行同步等待事件。进一步的,可以创建当前驱动任务的记录事件以及等待事件;在当前流任务队列中添加上述当前驱动任务的记录事件,以及在上述当前流任务队列的并行队列中添加上述当前驱动任务的等待事件,其中,上述当前驱动任务位于上述当前流队列中。58.具体的,可以将记录事件添加到当前驱动任务之后,将等待事件添加到并行驱动任务之前。即是并行流任务队列中驱动任务需要等待当前流任务队列中的当前驱动任务完成后才进行自身驱动任务的处理。具体请再次参考图5对应实施例。59.可选的,可以从上述事件数据库中找到目标事件对象;在目标事件对象中的调度事件列表尾部增加一个时间调度对象,上述时间调度对象的初始状态为未准备;生成上述当前流任务队列的事件记录任务,上述事件记录任务包括第一时间调度对象指针,上述第一时间调度对象指针指向上述调度事件列表尾部的时间调度对象;将上述事件记录任务作为记录事件添加到上述当前流任务队列的尾部。通过在调度事件列表尾部增加一个时间调度对象,可以指示调度事件列表中最新的目标事件对象以及快速查找到目标事件对象的状态。60.可选的,可以从上述事件数据库中找到目标事件对象;生成上述并行流任务队列的事件等待任务,上述事件等待任务包括第二时间调度对象指针,上述第二时间调度对象指针指向上述调度事件列表尾部的时间调度对象;将上述事件等待任务作为等待事件添加到上述并行流任务队列的尾部。通过在并行流任务队列增加事件等待任务,使得并行流任务队列通过该事件等待任务等待当前流任务队列的处理完成,并通过第二时间调度对象指针可以指示并行流任务队列中最新的事件等待任务以及快速查找到事件等待任务的状态。61.具体的,请参考图7,图7是本发明实施例提供的一种并行流任务队列创建事件依赖的示意图,如图7所示,驱动任务包括a1,b1,a2,b2…。62.首先,任务同步等待系统中的应用通过clstream流管理接口单元创建2个stream,记录为s1和s2,将驱动任务a1,a2…,添加到s1,将b1,b2…,添加到s2,在流调度层内,通过流控制管理单元控制流任务队列stream_task_queues中对应创建两个空的流任务队列s1和s2,完成clstream流管理接口单元的s1和s2创建。63.其次,应用通过clevent事件管理接口单元创建1个事件任务event,记录为e1;流调度层的event事件管理单元收到创建事件任务evente1的命令,在事件数据库event_table中创建一个新的空的event事件对象e1,每个event事件对象内包含:a)维护事件的record计数器,也可以称为事件计数器,记录为e1.record_count,初始值0;b)schedevent调度事件列表,记录为e1.sched_events_state[],列表初始为空,完成clevente1的创建。[0064]应用发送s1和s2内的驱动任务task,具体的,应用可以根据驱动任务的任务顺序下发,事件任务event主要包括事件记录和事件等待两个步骤流程,分别对应于上述记录事件和等待事件。上述s2是s1的并行流任务队列。[0065]其中,以上述s1的事件任务e1record来进行说明,上述事件记录的流程包括:a)应用调用clevent事件管理接口单元的e1.record操作下发event控制命令;b)流调度层的event事件管理单元收到e1.record控制命令,从事件数据库单元event_table中找到目标事件对象e1;在调度事件列表e1.sched_events_state[]的尾部增加一个时间调度对象schedevent,初始状态为未准备sched_event_not_ready;c)event事件管理单元内部生成一个streams1的eventrecord事件记录任务,记录为e1.record_task,e1.record_task内包括目标事件对象e1最新的时间调度对象schedevent的指针,记录为第一时间调度对象指针e1.record_task.sched_event_ptr,指针指向调度事件列表e1.sched_events_state[]尾部最后一个时间调度对象schedevent;d)同时,事件计数器e1.record_count加1;e)把e1.record_task放入到streams1的尾部。[0066]以上述s2的事件任务e1wait为例来进行说明,上述事件等待的流程包括:a)应用调用clevent事件管理接口单元的e1.wait操作下发event事件控制命令;b)流调度层的event事件管理单元收到e1.wait控制命令,从事件数据库单元event_table中找到目标事件对象e1;c)event事件管理单元内部生成一个streams2的eventwait任务,记录为e1.wait_task,e1.wait_task内包括目标事件对象e1最新的时间调度对象schedevent指针,记录为第二时间调度对象指针e1.wait_task.sched_event_ptr,指针指向调度事件列表e1.sched_events_state[]尾部最后一个时间调度对象schedevent;d)把e1.wait_task放入到streams2的尾部。[0067]通过上述事件记录和事件等待两个步骤流程,对驱动任务添加了事件依赖。[0068]603、执行事件依赖,使流任务队列实现并行同步等待。[0069]在本发明实施例中,当上述当前流任务队列执行到当前驱动任务的记录事件时,则更改上述第一时间调度对象指针指向的时间调度对象状态为准备完成;当上述第二时间调度对象指针指向的时间调度对象状态为未准备,则将对应上述并行流任务队列的状态切换为等待事件完成状态;当上述第二时间调度对象指针指向的时间调度对象状态为准备完成,则将对应上述并行流任务队列的状态切换为可执行状态;遍历上述等待事件完成状态的并行流任务队列,检查上述等待事件完成状态的并行流任务队列对应的时间调度对象状态;若上述等待事件完成状态的并行流任务队列对应的时间调度对象状态更改为准备完成,则将上述等待事件完成状态的并行流任务队列的状态切换为可执行状态。通过第一时间调度对象指针对当前流任务队列到的当前驱动任务的记录事件状态进行确定,在当前流任务队列的记录事件状态为准备完成的情况下,开始并行流任务队列中等待事件的处理,从而使得并行流任务队列可以根据等待事件的完成情况实现并行同步等待。[0070]具体的,进一步的,流调度层调度s1和s2的task,具体的,根据流任务队列中驱动任务和事件任务的先后顺序进行调度。事件任务的调度可以参考图3。具体的,并行流任务队列中增加了wait_task类型任务,如果等待事件对应的时间调度对象schedevent未准备(第二时间调度对象指针e1.wait_task.sched_event_ptr指示为sched_event_not_ready),那么该并行流任务队列流进入等待事件完成状态。遍历等待事件完成状态的流任务队列,检查等待的事件标记,如果读取到的等待事件的第二时间调度对象指针wait_task.sched_event_ptr为准备完成sched_event_complete,那么把流任务队列状态切换到可执行状态。[0071]进一步的,e1.record_task的处理流程:流任务队列调度执行到e1.record_task任务,会把该任务的时间调度对象schedevent状态标记为已完成,同时将第一时间调度对象指针record_task.sched_event_ptr的状态更改为准备完成sched_event_complete。[0072]更进一步的,e1.wait_task的处理流程:流任务队列调度执行到e1.wait_task任务,会读取该任务的时间调度对象schedevent状态,如果未完成,那么该流状态机切换到等待事件完成状态;如果完成,那么继续执行下一个驱动任务。应用复位clevent事件管理接口单元:流调度层中的事件数据库event_table中,一个clevent事件管理接口单元对应多个时间调度对象schedevent。应用每次调用e1.record操作,都会在该调度事件列表e1.sched_events_state[]列表尾部增加一个新的时间调度对象schedevent。应用需要在e1.wait完成后调用e1.reset操作,清空调度事件列表e1.sched_events_state[]。[0073]可选的,可以在上述当前流任务队列中添加的驱动任务数量达到预设值时,则创建一个标记事件对象,并将应用线程进行阻塞,生成上述当前流任务队列的流标记任务,上述流标记任务包括第三时间调度对象指针,上述第三时间调度对象指针指向上述标记事件对象;将上述流标记任务作为流标记事件添加到当前流任务队列的尾部;当上述当前流任务队列执行到上述流标记事件时,则唤醒阻塞的上述应用线程,并释放上述标记事件对象。在驱动任务数量超出预设值时,将应用线程进行阻塞,可以避免较多的任务进入调度造成流任务队列阻塞;当驱动任务处理完成时,通过第三时间调度对象指针指向上述标记事件对象来提示应用线程的唤醒,以保证任务处理的流畅性。[0074]进一步的,请参考图8,图8是本发明实施例提供的一种clstream同步等待的示意图,如图8所示,应用在streams1上下发n个任务后,调用s1.sync来同步等待前面n个任务全部执行完毕。[0075]具体的,1)应用调用s1.sync操作等待流同步,从clsignal线程管理接口单元中申请标记事件对象sig1,创建一个新的流标记任务s1.sync_task任务,其中流标记任务包括第三时间调度对象指针s1.sync_task.signal_ptr指向标记事件对象sig1,发送给流调度层处理,应用线程调用线程等待sig1.wait进入阻塞状态;2)流调度层的任务分发单元收到s1.sync_task任务,放入到s1的尾部;3)流调度层的流调度单元执行到s1.sync_task任务,表示该s1的任务全部完成,执行第三时间调度对象指针s1.sync_task.signal_ptr.notify的指示操作;4)操作系统调度唤醒阻塞的应用线程,从线程等待sig1.wait中退出,释放标记事件对象sig1。[0076]可选的,事件数据库包括依赖事件列表,依赖事件列表中包括依赖事件的标记任务列表,可以从上述事件数据库中找到目标事件对象;生成事件标记任务,上述事件标记任务包括第四时间调度对象指针以及第五时间调度对象指针,上述第四时间调度对象指针指向上述标记事件对象,上述第五时间调度对象指针指向上述调度事件列表中的时间调度对象;当上述调度事件列表为空或者上述时间调度对象的状态为准备完成,则调用上述第四时间调度对象指针;当上述调度事件列表不为空或者上述时间调度对象的状态为未准备,则在上述依赖事件的标记任务列表的尾部增加上述事件标记任务;遍历上述依赖事件列表,依次读取记录事件或等待事件,当上述第五时间调度对象指针指向的时间调度对象状态为准备完成,调用上述第四时间调度对象指针;从上述依赖事件列表中删除对应的记录事件或等待事件,并释放上述标记事件对象。在唤醒阻塞的应用线程后,从依赖事件列表中删除对应的依赖事件,并释放上述标记事件对象,可以释放依赖事件列表的资源,以添加新的依赖事件。[0077]进一步的,请参考图9,图9是本发明实施例提供的一种clevent同步等待的示意图,如图9所示,线程1在s1流上发送任务a1,a2…,在t1时刻进行e1.sync操作,由于s1的调度还未执行导致线程1阻塞,直到t3时刻s1执行到e1,线程1被唤醒继续工作。线程2在s1流上继续发送任务a3,a4…,在t2时刻进行e1.sync操作,对应于等待前面a1~a4任务完成,由于s1的调度还未执行完a1~a4任务导致线程2阻塞,在t4时刻s1执行到e1,线程2唤醒继续工作。[0078]具体的,在clevent事件管理接口单元创建目标事件对象e1后,1.应用调用e1.sync操作等待事件同步:从clsignal线程管理接口单元中申请标记事件对象sig1,创建一个新的事件标记任务e1.sync_task,其中事件标记任务e1.sync_task中的第四时间调度对象指针e1.sync_task.signal_ptr指向事件标记对象sig1,发送给流调度层处理,应用线程调用线程等待sig1.wait进入阻塞状态。2.流调度层中event事件管理单元的e1.sync_task任务处理:1)在事件数据库中找到目标事件对象e1;2)如果调度事件列表e1.sched_events_state[]为空或者尾部最后一个时间调度对象schedevent的状态为准备完成sched_event_complete,那么调用第四时间调度对象指针e1.sync_task.signal_ptr.notify指示操作并退出处理;否则继续处理剩余任务;3)事件数据库的依赖事件列表wait_event_task[]存储依赖事件的标记任务列表(synctask列表),在依赖事件的标记任务列表的尾部增加事件标记任务e1.sync_task,并记录依赖事件对应的时间调度对象schedevent信息,第五时间调度对象指针e1.sync_task.sched_event_ptr指向调度事件列表e1.sched_events_state[]中最后一个时间调度对象schedevent。3.stream调度扩展:每次调度遍历事件数据库的依赖事件列表wait_event_task[],依次读取任务的依赖事件,当第五时间调度对象指针sync_task.sched_event_ptr的状态为准备完成sched_event_complete时,那么调用第四时间调度对象指针sync_task.signal_ptr.notify指示操作,并在依赖事件列表wait_event_task[]中删除已经完成的依赖事件。4.操作系统调度唤醒阻塞的应用线程,从等待线程sig1.wait中退出,释放事件标记对象sig1。[0079]本发明实施例中,将待处理业务拆分为第一数量的驱动任务,加入到第二数量的流任务队列中;对所述驱动任务添加事件依赖,所述事件依赖包括不同流任务队列之间的并行同步等待事件;执行所述事件依赖,使所述流任务队列实现并行同步等待。通过将待处理业务拆分为多个驱动任务,再将驱动任务转换为驱动任务流添加到多个流任务队列中,使得多线程之间的调度转换为流之间的调度,利用事件依赖来实现多个流任务队列的并行等待,从而实现基于流任务队列的任务同步等待,相比于多线程之间的直接调度,系统调度开销降低了。[0080]可选的,对于流调度层中的调度,可以从应用层中获取驱动任务。[0081]在本发明实施例中,上述驱动任务可以是需要并行计算的任务,上述驱动任务包括控制任务、驱动请求任务。[0082]上述应用层包括一个或多个应用线程,上述应用线程通过用户交互产生对应的驱动任务。上述控制任务主要是驱动任务流的创建和销毁命令,控制任务由上述任务分发单元转发给流控制管理单元进行处理。上述驱动请求任务主要是上层用户通过流调度单元请求驱动处理计算的任务,根据驱动请求任务任务所在的流任务队列,将驱动任务流写入到对应流任务队列的尾部,以得到先进先出的流。上述驱动应答任务主要是驱动完成后通过驱动任务完成状态辅助信息通过流调度单元,流调度单元触发后续流的驱动请求任务处理。[0083]更进一步的,上述驱动请求任务中包括该任务对应的驱动id,上述流调度层包括一个或多个流调度线程,上述驱动层包括多个驱动线程(驱动线程也可以称为驱动),上述驱动请求任务在应用线程、流调度线程和驱动线程之间以流数据的形式进行传递。[0084]基于控制任务,将驱动请求任务转换为驱动任务流,并添加到流任务队列中。[0085]在本发明实施例中,上述控制任务通过上述流调度层进行处理,上述流调度层通过上述控制任务进行驱动任务流的创建和销毁,并将上述驱动请求任务转换为驱动任务流;将上述驱动请求任务转换为驱动任务流可以采用强制转换的方式进行,从而将应用线程的数据格式转换为流数据格式,得到上述驱动任务流。[0086]进一步的,可以基于上述控制任务,在创建流任务队列时,判断待创建流任务队列的数量是否超过第一数量阈值;若上述待创建流任务队列的数量不超过上述第一数量阈值,则创建新的流任务队列;将上述驱动请求任务按预设的转化规则强制转换为驱动任务流,并按先进先出的规则添加到上述新的流任务队列中。[0087]更进一步的,可以基于上述控制任务,在销毁流任务队列时,判断待销毁的流任务队列中是否存在未完成的驱动任务流;若上述待销毁的流任务队列中存在未完成的驱动请求任务流,和/或若上述待创建流任务队列的数量超过上述第一数量阈值,则返回第一失败信息到应用层;基于上述控制任务,判断上述流任务队列中驱动任务流的数量是否超过第二数量阈值;若上述流任务队列中驱动任务流的数量超过第二数量阈值,则堵塞上述应用层的任务,并返回第二失败信息到应用层。[0088]具体的,当待销毁的流任务队列中存在未完成的驱动请求任务流时,则说明上一个任务还没有执行完成,需要继续进行执行;上述待创建流任务队列的数量超过上述第一数量阈值,则说明在流调度层中的并行的流任务队列达到承载上限。[0089]上述第一失败信息包括创建失败信息和销毁失败信息。上述创建失败信息可以用于向用户提示流任务队列创建失败,上述销毁失败信息可以用于向用户提示流任务队列销毁失败。[0090]上述第一数量阈值可以理解为流任务队列并行的最大数量,在本发明实施例中,上述第一数量阈值优选为1024。在创建流任务队列时,判断待创建流任务队列的数量是否超过1024;若上述待创建流任务队列的数量不超过1024,则创建新的流任务队列,若上述待创建流任务队列的数量超过1024,则返回创建失败信息。在销毁流任务队列时,若检测到流任务队列中还存在驱动任务流,说明该流任务队列中存在未完成的驱动任务流,则返回销毁失败信息。[0091]上述第二数量阈值可以理解为一个流任务队列中驱动任务流的最大流数据量,上述流任务队列中驱动任务流的数据量超过流任务队列的最大流数据量,则堵塞上述应用层的任务,并返回第二失败信息到应用层。[0092]基于驱动应答任务,对流任务队列中的驱动任务流进行驱动分发。[0093]在本发明实施例中,在驱动完成后可以通过驱动任务完成状态辅助信息通知流调度单元,以使流调度单元触发后的驱动请求任务处理。[0094]可选的,上述流调度单元可以从上述流任务队列中取出上述驱动任务流;根据上述驱动应答任务,调用上述驱动负载查询函数以及上述驱动任务完成状态的申请以及释放函数,返回上述驱动任务流所需要的驱动的驱动状态;若上述驱动状态为可用,则将上述驱动任务流标记为进入等待驱动完成状态,并在返回驱动状态为可执行时,将上述驱动任务流切换到可执行状态;若上述驱动状态为不可用,则将上述驱动任务流标记为等待驱动资源可用状态;实时或实时遍历上述等待驱动资源可用状态的驱动任务流,并调用驱动负载查询函数查询对应驱动的负载状态,若上述负载状态符合预设的可执行条件,则将对应的等待驱动资源可用状态的驱动任务流切换到可执行状态。[0095]在本发明实施例中,可以遍历所有可执行状态的驱动任务流,并从对应流任务队列的头部取出驱动任务流,交给上述驱动分发单元处理,上述驱动分发单元接收流调度单元的驱动任务流,解析该驱动请求任务的该驱动id,根据该驱动id在驱动存储单元中搜索到匹配的驱动注册信息,通过上述驱动分发单元调用驱动负载查询函数查询该驱动id对应驱动的负载状态。[0096]如果该驱动id对应驱动的负载高,说明该驱动id对应驱动处于忙状态,则将驱动状态为不可用(失败)返回到上述流调度单元,上述流调度单元则将该驱动任务流标记为等待驱动资源可用状态;如果该驱动id对应驱动的负载低,则说明该驱动id对应驱动处于可用状态,则将驱动状态为可用返回到上述流调度单元,上述流调度单元则将该驱动任务流标记为等待驱动完成状态,并记录该驱动任务流正在等待的驱动任务完成状态辅助信息(驱动状态为可执行),如果接收到驱动任务完成状态辅助信息,则找到等待该驱动任务完成状态辅助信息的驱动任务流,将该驱动任务流的状态切换可执行状态;进一步的,可以遍历所有等待驱动资源可用状态的驱动任务流,根据等待资源的驱动id,通过驱动分发单元调用驱动负载查询函数查询该驱动id对应驱动的负载状态,如果查询该驱动负载低,那么该驱动任务流状态由等待驱动资源可用状态切换到可执行状态。[0097]从驱动层中匹配分发后的驱动来对所述驱动任务流进行处理。[0098]在本发明实施例中,上述在驱动层中匹配执行上述可执行状态的驱动任务流所需要的可执行驱动;调用上述驱动处理函数将可执行状态的驱动任务流转发到上述可执行驱动进行处理。[0099]进一步的,上述驱动层中的驱动线程可以通过上述驱动信息注册单元进行注册,然后存储到上述驱动信息存储单元。在初始化阶段,获取各个驱动的驱动id、驱动负载查询函数、运动消息处理函数以及驱动任务完成状态的申请以及释放函数;根据所述驱动的驱动id、驱动负载查询函数、驱动处理函数以及驱动任务完成状态的申请以及释放函数,对所述驱动进行注册,得到驱动信息;将所述驱动信息存放在驱动信息表中,所述驱动信息表中的驱动信息根据所述驱动负载查询函数、驱动处理函数以及驱动任务完成状态的申请以及释放函数实时更新。[0100]其中,上述驱动任务完成状态的申请以及释放函数用于处理上述驱动任务完成状态辅助信息。上述驱动负载查询函数用于查询驱动层中各个驱动线程的负载情况,上述驱动处理函数用于调用驱动层中对应的驱动线程对驱动任务流进行处理。上述驱动任务完成状态辅助信息还包括资源释放请求,驱动分发单元在接收到驱动应答任务后,若驱动应答任务对应的驱动任务完成状态辅助信息为资源释放请求,则会释放对驱动应答任务对应的驱动任务流的资源。[0101]具体的,每个驱动请求任务在下发时,都会分配一个驱动任务完成状态辅助信息的对应资源,当驱动请求任务完成后,通过该驱动任务完成状态辅助信息通知流调度单元,流调度单元根据该驱动任务完成状态辅助信息进行高度,并在完成后释放该驱动任务完成状态辅助信息的对应资源。[0102]在本发明实施例中,通过将驱动请求任务转换为驱动任务流,使得多线程之间的调度转换为流之间的调度,利用流任务队列和驱动分发来实现驱动任务流之间的调度,由于通过流任务队列调度,相比于多线程之间的直接调度,系统调度开销降低了。另外,通过流任务队列将应用层与驱动层之间进行解耦,可以通过配置流任务队列和驱动来进行扩展。[0103]可选的,在一种可能的实施例中,上述流调度线程为一个,可以理解为上述流调度采用独立线程进行实现,通过上述独立的流调度线程将上述应用线程与驱动线程进行解耦,使得本发明实施例的上述任务同步等待系统可以通过配置流任务队列和驱动来进行扩展。[0104]进一步的,在采用独立线程实现流调度的情况下,可以并行调度预设数量的流任务队列,比如,并行调度1024个流任务队列,内部任意的耗时处理均会严重影响调度效率,流调度线程可以禁止执行其他任意的计算任务,驱动层可以设计为驱动线程,driver_register_table(驱动信息存储单元)内注册的通用驱动处理函数(也可以称为驱动任务同步等待函数)会把流调度中的驱动请求任务转发到驱动线程处理。[0105]在一种可能的实施例中,上述驱动请求任务在应用线程、流调度线程和驱动线程之间传递,为了减少驱动请求任务存储管理开销,相关数据结构定义方法如下:定义通用驱动消息drvcommontask:通用驱动消息中包括driverid,driverevent等信息;定义各自驱动消息:按驱动id定义各自驱动消息,比如驱动a的drvtaska1消息,消息头drvtaska1::header为drvcommontask类型,后续drvtaska1::body存放驱动a具体参数配置消息。[0106]具体的,以drvtaska1为例对相关数据的存储进行说明:1)上层用户在应用线程中创建drvtaska1对象,下发给流调度线程处理;2)流调度线程在收到驱动请求任务后,强转为通用驱动消息drvcommontask处理;处理期间不删除该驱动请求任务对象,而是直接转发给驱动a线程处理;3)驱动a线程收到该驱动请求任务任务后,强转为drvtaska1类型处理,处理完毕后释放该驱动请求任务。这样,可以减少驱动请求任务存储管理开销。[0107]在一种可能的实施例中,可以将获取到的上述驱动任务保留到预设的任务队列中;判断上述驱动任务对应的上述驱动任务流是否完成处理;若上述驱动任务流完成处理,则从上述预设的任务队列中将上述驱动任务进行释放;若上述驱动任务流没有完成处理,则继续扣留上述驱动任务在上述预设的任务队列中。这样,可以保证驱动任务流的处理过程中,出现问题时可以对上述驱动任务进行复用,不需要再到应用层中查找对应的驱动任务。[0108]需要说明的是,本发明实施例提供的任务同步等待方法可以应用于可以进行任务同步等待的智能手机、电脑、服务器等设备。[0109]可选的,请参见图10,图10是本发明实施例提供的一种任务同步等待装置的结构示意图,如图10所示,所述装置包括:[0110]拆分模块1001,用于将待处理业务拆分为第一数量的驱动任务,加入到第二数量的流任务队列中,所述第二数量的流任务队列之间为并行关系;[0111]添加模块1002,用于对所述驱动任务添加事件依赖,所述事件依赖包括不同流任务队列之间的并行同步等待事件;[0112]执行模块1003,用于执行所述事件依赖,使所述流任务队列实现并行同步等待。[0113]可选的,所述拆分模块1001还用于根据待处理业务的总数据量,确定流任务队列的第二数量;将待处理业务拆分为第一数量的驱动任务,并通过所述流任务队列配置驱动任务之间的并行和串行关系;将并行的驱动任务对应添加到并行的流任务队列中,并在流任务队列中配置串行的驱动任务。[0114]可选的,所述事件依赖包括记录事件的依赖以及等待事件的依赖,所述添加模块1002还用于创建当前驱动任务的记录事件以及等待事件;在当前流任务队列中添加所述当前驱动任务的记录事件,以及在所述当前流任务队列的并行队列中添加所述当前驱动任务的等待事件,其中,所述当前驱动任务位于所述当前流队列中。[0115]可选的,所述添加模块1002还用于在预设的事件数据库中为所述当前驱动任务创建一个事件对象,所述事件对象包括事件计数器以及调度事件列表,所述事件计数器的初始值为0,所述调度事件列表初始为空;基于所述事件对象,创建得到所述当前驱动任务的记录事件和等待事件。[0116]可选的,所述添加模块1002还用于从所述事件数据库中找到目标事件对象;在目标事件对象中的调度事件列表尾部增加一个时间调度对象,所述时间调度对象的初始状态为未准备;生成所述当前流任务队列的事件记录任务,所述事件记录任务包括第一时间调度对象指针,所述第一时间调度对象指针指向所述调度事件列表尾部的时间调度对象;将所述事件记录任务作为记录事件添加到所述当前流任务队列的尾部。[0117]可选的,所述添加模块1002还用于从所述事件数据库中找到目标事件对象;生成所述并行流任务队列的事件等待任务,所述事件等待任务包括第二时间调度对象指针,所述第二时间调度对象指针指向所述调度事件列表尾部的时间调度对象;将所述事件等待任务作为等待事件添加到所述并行流任务队列的尾部。[0118]可选的,所述执行模块1003还用于当所述当前流任务队列执行到当前驱动任务的记录事件时,则更改所述第一时间调度对象指针指向的时间调度对象状态为准备完成;当所述第二时间调度对象指针指向的时间调度对象状态为未准备,则将对应所述并行流任务队列的状态切换为等待事件完成状态;当所述第二时间调度对象指针指向的时间调度对象状态为准备完成,则将对应所述并行流任务队列的状态切换为可执行状态;遍历所述等待事件完成状态的并行流任务队列,检查所述等待事件完成状态的并行流任务队列对应的时间调度对象状态;若所述等待事件完成状态的并行流任务队列对应的时间调度对象状态更改为准备完成,则将所述等待事件完成状态的并行流任务队列的状态切换为可执行状态。[0119]可选的,所述执行模块1003还用于在所述当前流任务队列中添加的驱动任务数量达到预设值时,则创建一个标记事件对象,并将应用线程进行阻塞;生成所述当前流任务队列的流标记任务,所述流标记任务包括第三时间调度对象指针,所述第三时间调度对象指针指向所述标记事件对象;将所述流标记任务作为流标记事件添加到当前流任务队列的尾部;当所述当前流任务队列执行到所述流标记事件时,则唤醒阻塞的所述应用线程,并释放所述标记事件对象。[0120]可选的,所述事件数据库包括依赖事件列表,所述依赖事件列表中包括依赖事件的标记任务列表,所述依赖事件为记录事件或等待事件,所述执行模块1003还用于从所述事件数据库中找到目标事件对象;生成事件标记任务,所述事件标记任务包括第四时间调度对象指针以及第五时间调度对象指针,所述第四时间调度对象指针指向所述标记事件对象,所述第五时间调度对象指针指向所述调度事件列表中的时间调度对象;当所述调度事件列表为空或者所述时间调度对象的状态为准备完成,则调用所述第四时间调度对象指针;当所述调度事件列表不为空或者所述时间调度对象的状态为未准备,则在所述依赖事件的标记任务列表的尾部增加所述事件标记任务;遍历所述依赖事件列表,依次读取记录事件或等待事件,当所述第五时间调度对象指针指向的时间调度对象状态为准备完成,调用所述第四时间调度对象指针;从所述依赖事件中删除对应的记录事件或等待事件,并释放所述标记事件对象。[0121]需要说明的是,本发明实施例提供的任务同步等待装置可以应用于可以进行任务同步等待的智能手机、电脑、服务器等设备。[0122]本发明实施例提供的任务同步等待装置能够实现上述方法实施例中任务同步等待方法实现的各个过程,且可以达到相同的有益效果。为避免重复,这里不再赘述。[0123]参见图11,图11是本发明实施例提供的一种电子设备的结构示意图,如图11所示,包括:存储器1102、处理器1101及存储在所述存储器1102上并可在所述处理器1101上运行的任务同步等待方法的计算机程序,其中:[0124]处理器1101用于调用存储器1102存储的计算机程序,执行如下步骤:[0125]将待处理业务拆分为第一数量的驱动任务,加入到第二数量的流任务队列中,所述第二数量的流任务队列之间为并行关系;[0126]对所述驱动任务添加事件依赖,所述事件依赖包括不同流任务队列之间的并行同步等待事件;[0127]执行所述事件依赖,使所述流任务队列实现并行同步等待。[0128]可选的,处理器1101执行的所述将待处理业务拆分为第一数量的驱动任务,加入到第二数量的流任务队列中,包括:[0129]根据待处理业务的总数据量,确定流任务队列的第二数量;[0130]将待处理业务拆分为第一数量的驱动任务,并通过所述流任务队列配置驱动任务之间的并行和串行关系;[0131]将并行的驱动任务对应添加到并行的流任务队列中,并在流任务队列中配置串行的驱动任务。[0132]可选的,所述事件依赖包括记录事件的依赖以及等待事件的依赖,处理器1101执行的所述对所述驱动任务添加事件依赖,包括:[0133]创建当前驱动任务的记录事件以及等待事件;[0134]在当前流任务队列中添加所述当前驱动任务的记录事件,以及在所述当前流任务队列的并行队列中添加所述当前驱动任务的等待事件,其中,所述当前驱动任务位于所述当前流队列中。[0135]可选的,处理器1101执行的所述创建当前驱动任务的记录事件以及等待事件,包括:[0136]在预设的事件数据库中为所述当前驱动任务创建一个事件对象,所述事件对象包括事件计数器以及调度事件列表,所述事件计数器的初始值为0,所述调度事件列表初始为空;[0137]基于所述事件对象,创建得到所述当前驱动任务的记录事件和等待事件。[0138]可选的,处理器1101执行的所述基于所述事件对象,创建得到所述当前驱动任务的记录事件,包括:[0139]从所述事件数据库中找到目标事件对象;[0140]在目标事件对象中的调度事件列表尾部增加一个时间调度对象,所述时间调度对象的初始状态为未准备;[0141]生成所述当前流任务队列的事件记录任务,所述事件记录任务包括第一时间调度对象指针,所述第一时间调度对象指针指向所述调度事件列表尾部的时间调度对象;[0142]将所述事件记录任务作为记录事件添加到所述当前流任务队列的尾部。[0143]可选的,处理器1101执行的所述基于所述事件对象,创建得到所述当前驱动任务的等待事件,包括:[0144]从所述事件数据库中找到目标事件对象;[0145]生成所述并行流任务队列的事件等待任务,所述事件等待任务包括第二时间调度对象指针,所述第二时间调度对象指针指向所述调度事件列表尾部的时间调度对象;[0146]将所述事件等待任务作为等待事件添加到所述并行流任务队列的尾部。[0147]可选的,处理器1101执行的所述执行所述事件依赖,使所述流任务队列实现并行同步等待,包括:[0148]当所述当前流任务队列执行到当前驱动任务的记录事件时,则更改所述第一时间调度对象指针指向的时间调度对象状态为准备完成;[0149]当所述第二时间调度对象指针指向的时间调度对象状态为未准备,则将对应所述并行流任务队列的状态切换为等待事件完成状态;[0150]当所述第二时间调度对象指针指向的时间调度对象状态为准备完成,则将对应所述并行流任务队列的状态切换为可执行状态;[0151]遍历所述等待事件完成状态的并行流任务队列,检查所述等待事件完成状态的并行流任务队列对应的时间调度对象状态;[0152]若所述等待事件完成状态的并行流任务队列对应的时间调度对象状态更改为准备完成,则将所述等待事件完成状态的并行流任务队列的状态切换为可执行状态。[0153]可选的,处理器1101执行的所述执行所述事件依赖,使所述流任务队列实现并行同步等待还包括:[0154]在所述当前流任务队列中添加的驱动任务数量达到预设值时,则创建一个标记事件对象,并将应用线程进行阻塞;[0155]生成所述当前流任务队列的流标记任务,所述流标记任务包括第三时间调度对象指针,所述第三时间调度对象指针指向所述标记事件对象;[0156]将所述流标记任务作为流标记事件添加到当前流任务队列的尾部;[0157]当所述当前流任务队列执行到所述流标记事件时,则唤醒阻塞的所述应用线程,并释放所述标记事件对象。[0158]可选的,所述事件数据库包括依赖事件列表,依赖事件列表用于记录依赖事件,所述依赖事件为记录事件或等待事件,所述依赖事件列表中包括依赖事件的标记任务列表,处理器1101执行的所述当所述当前流任务队列执行到所述标记任务时,则唤醒阻塞的所述应用线程,并释放所述标记事件对象,包括:[0159]从所述事件数据库中找到目标事件对象;[0160]生成事件标记任务,所述事件标记任务包括第四时间调度对象指针以及第五时间调度对象指针,所述第四时间调度对象指针指向所述标记事件对象,所述第五时间调度对象指针指向所述调度事件列表中的时间调度对象;[0161]当所述调度事件列表为空或者所述时间调度对象的状态为准备完成,则调用所述第四时间调度对象指针;[0162]当所述调度事件列表不为空或者所述时间调度对象的状态为未准备,则在所述依赖事件的标记任务列表的尾部增加所述事件标记任务;[0163]遍历所述依赖事件列表,依次读取记录事件或等待事件,当所述第五时间调度对象指针指向的时间调度对象状态为准备完成,调用所述第四时间调度对象指针;[0164]从所述依赖事件中删除对应的记录事件或等待事件,并释放所述标记事件对象。[0165]需要说明的是,本发明实施例提供的电子设备可以应用于可以进行任务同步等待的智能手机、电脑、服务器等设备。[0166]本发明实施例提供的电子设备能够实现上述方法实施例中任务同步等待方法实现的各个过程,且可以达到相同的有益效果。为避免重复,这里不再赘述。[0167]本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现本发明实施例提供的任务同步等待方法或应用端任务同步等待方法的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。[0168]本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存取存储器(randomaccessmemory,简称ram)等。[0169]以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。当前第1页12当前第1页12
再多了解一些

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

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

相关文献