CN103713944B - 一种内核中线程的处理方法、装置和系统 - Google Patents
一种内核中线程的处理方法、装置和系统 Download PDFInfo
- Publication number
- CN103713944B CN103713944B CN201310687462.0A CN201310687462A CN103713944B CN 103713944 B CN103713944 B CN 103713944B CN 201310687462 A CN201310687462 A CN 201310687462A CN 103713944 B CN103713944 B CN 103713944B
- Authority
- CN
- China
- Prior art keywords
- thread
- task
- processing
- class
- pool
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明实施例公开了一种内核中线程的处理方法、装置和系统。本发明实施例通过引入处理线程池,然后在需要对线程进行处理时,启动该处理线程池,利用该处理线程池对线程任务进行并行调度,并对调度的线程任务进行执行,从而实现了各个线程任务之间的并行处理,大大提高了仿真速度,而且可以更充分且有效地利用多核CPU资源的优越性,有利于提高系统性能。
Description
技术领域
本发明涉及通信技术领域,具体涉及一种内核中线程的处理方法、装置和系统。
背景技术
SystemC是一种基于C++设计的开源电子系统级(ESL,Electronic System Level)建模语言,利用SystemC可以很方便地构建事务级建模(TLM,Trans action LevelModeling)、时序近似(CX,Cycle Approximate)和时序精确(C A,Cycle Accurate)等各级别的ESL模型,并基于这些ESL模型构建片上系统(SoC,System on Chip),以完成芯片架构探索、验证和支持软件早期开发等工作。SystemC提供了时钟、端口、通道、实例(Method)和线程(Thread)等机制来实现对硬件行为的模拟;其中,时钟机制用于实现系统时间推进;端口和通道机制用于实现不同硬件模块间的互联;而Method和Thread机制则用于实现对硬件处理行为的模拟。SystemC内核的基本工作过程是在时间驱动下,通过执行Method和Thread来模拟硬件行为,实现对硬件平台的仿真。
现有的SystemC内核在仿真过程中,在事件激励下,可以将所有待执行的Method和Thread放入可执行(Runnable)列表中,然后由SystemC内核调度核心模块(simcontext)在调度时,依次取出Runnable列表中的各个Method和Thread来执行,其中,不同的Method和Thread之间只能串行执行,例如,调度核心模块会先判断Runnable列表是否为空,如果为空,则流程结束,如果不为空,则从Runnable列表中依次获取Method并执行,而如果获取不到Method,则才从Runnable列表中依次获取Thread以进行执行。
在对现有技术的研究和实践过程中,本发明的发明人发现,由于现有的SystemC内核只能采用串行方式来执行Method和Thread,因此,仿真速度较慢,特别是对于一些超大规模的片上系统而言,这种仿真速度更大大影响了其性能,而且也无法充分利用多核中央处理单元(CPU,Center Process Unit)资源。
发明内容
本发明实施例提供一种内核中线程的处理方法、装置和系统,可以大大提高仿真速度。
第一方面,本发明实施例提供一种内核中线程的处理方法,包括:
启动处理线程池,所述处理线程池用于对线程任务进行并行调度,所述线程任务包括第一类线程任务和第二类线程任务;
利用所述处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;
利用所述处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
在第一种可能的实施方式中,结合第一方面,所述利用所述处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;利用所述处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务,包括:
利用所述处理线程池,从可执行列表中并行获取第一类线程任务;
若获取到第一类线程任务,则执行获取到的第一类线程任务;
若获取不到第一类线程任务,则利用所述处理线程池,从可执行列表中并行获取第二类线程任务;
若获取到第二类线程任务,则执行获取到的第二类线程任务;
若获取不到第二类线程任务,则线程处理结束,并进行线程同步。
在第二种可能的实施方式中,结合第一方面,所述处理线程池包括第一类线程任务的处理线程池和第二类线程任务的处理线程池,则所述启动处理线程池;利用所述处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;利用所述处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务,包括:
同时启动第一类线程任务的处理线程池和第二类线程任务的处理线程池;
利用所述第一类线程任务的处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;
利用所述第二类线程任务的处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
在第三种可能的实施方式中,结合第一方面,所述处理线程池包括第一类线程任务的处理线程池和第二类线程任务的处理线程池,则所述启动处理线程池;利用所述处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;利用所述处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务,包括:
启动第一类线程任务的处理线程池;
利用所述第一类线程任务的处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;
在可执行列表中的所有第一类线程任务执行完毕后,启动第二类线程任务的处理线程池;
利用所述第二类线程任务的处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
在第四种可能的实施方式中,结合第一方面的第三种可能的实施方式,所述利用所述第一类线程任务的处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;在可执行列表中的所有第一类线程任务执行完毕后,启动第二类线程任务的处理线程池;利用所述第二类线程任务的处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务,包括:
利用所述第一类线程任务的处理线程池,从可执行列表中并行获取第一类线程任务;
若获取到第一类线程任务,则执行获取到的第一类线程任务;
若获取不到第一类线程任务,则启动第二类线程任务的处理线程池,利用所述第二类线程任务的处理线程池,从可执行列表中并行获取第二类线程任务;
若获取到第二类线程任务,则执行获取到的第二类线程任务;
若获取不到第二类线程任务,则线程处理结束。
在第五种可能的实施方式中,结合第一方面的第二、三或四种可能的实施方式,在所述启动处理线程池之前,还包括:
判断可执行列表是否为空;或者,
判断可执行列表中的线程任务是否大于1;
所述启动处理线程池具体为:判断可执行列表不为空时,启动处理线程池;或者,判断可执行列表中的线程任务(包括第一类型线程任务和第二类型任务)大于1时,启动处理线程池。
在第六种可能的实施方式中,结合第一方面、第一方面的第一、二、三或四种可能的实施方式,其汇总,
所述第一类线程任务为Method,所述第二类线程任务为Thread;或者,
所述第一类线程任务为Thread,所述第二类线程任务为Method。
第二方面,本发明实施例还提供一种内核中线程的处理装置,包括启动模块、第一处理模块和第二处理模块;
启动模块,用于启动处理线程池,所述处理线程池用于对线程任务进行并行调度,所述线程任务包括第一类线程任务和第二类线程任务;
第一处理模块,用于利用所述处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;
第二处理模块,用于利用所述处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
在第一种可能的实施方式中,结合第二方面,其中:
所述第一处理单元,具体用于利用所述处理线程池,从可执行列表中并行获取第一类线程任务,若获取到第一类线程任务,则执行获取到的第一类线程任务;若获取不到第一类线程任务,则触发第二处理单元执行利用所述处理线程池,从可执行列表中并行获取第二类线程任务的操作;
所述第二处理单元,具体用于在所述第一处理单元获取不到第一类线程任务时,利用所述处理线程池,从可执行列表中并行获取第二类线程任务,若获取到第二类线程任务,则执行获取到的第二类线程任务;若获取不到第二类线程任务,则线程处理结束,并进行线程同步。
在第二种可能的实施方式中,结合第二方面,其中,所述处理线程池包括第一类线程任务的处理线程池和第二类线程任务的处理线程池,则:
所述启动单元,具体用于同时启动第一类线程任务的处理线程池和第二类线程任务的处理线程池;
所述第一处理单元,具体用于利用所述第一类线程任务的处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;
所述第二处理单元,具体用于利用所述第二类线程任务的处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
在第三种可能的实施方式中,结合第二方面,其中:所述处理线程池包括第一类线程任务的处理线程池和第二类线程任务的处理线程池,则:
所述启动单元,具体用于启动第一类线程任务的处理线程池,以及在第一处理单元将可执行列表中的所有第一类线程任务执行完毕后,启动第二类线程任务的处理线程池;
所述第一处理单元,具体用于利用所述第一类线程任务的处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;
所述第二处理单元,具体用于利用所述第二类线程任务的处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
在第四种可能的实施方式中,结合第二方面的第三种可能的实施方式,其中:
所述第一处理单元,具体用于利用所述第一类线程任务的处理线程池,从可执行列表中并行获取第一类线程任务,若获取到第一类线程任务,则执行获取到的第一类线程任务;若获取不到第一类线程任务,则触发启动单元启动第二类线程任务的处理线程池;
所述第二处理单元,具体用于利用所述第二类线程任务的处理线程池,从可执行列表中并行获取第二类线程任务,若获取到第二类线程任务,则执行获取到的第二类线程任务;若获取不到第二类线程任务,则线程处理结束。
在第五种可能的实施方式中,结合第二方面的第二、三或四种可能的实施方式,其中,该内核中线程的处理装置还包括判断单元;
所述判断单元,用于判断可执行列表是否为空;或者,用于判断可执行列表中的线程任务是否大于1;
则所述启动单元,具体用于在判断单元判断可执行列表不为空时,启动处理线程池;或者,具体用于在判断可执行列表中的线程任务大于1时,启动处理线程池。
第三方面,本发明实施例还提供一种通信系统,包括本发明实施例提供的任一项所述的内核中线程的处理装置。
本发明实施例通过引入处理线程池,然后在需要对线程进行处理时,启动该处理线程池,利用该处理线程池对线程任务进行并行调度,并对调度的线程任务进行执行,从而实现了第一类线程任务和第二类线程任务,比如Method和Thread等各个线程任务之间的并行处理,大大提高了仿真速度,而且可以更充分且有效地利用多核CPU资源的优越性,有利于提高系统性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的内核中线程的处理方法的流程图;
图2是本发明实施例提供的内核中线程的处理方法的流程示意图;
图3是本发明实施例提供的内核中线程的处理方法的另一流程示意图;
图4是本发明实施例提供的内核中线程的处理方法的又一流程示意图;
图5是本发明实施例提供的内核中线程的处理装置的结构图;
图6是本发明实施例提供的通信设备的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种内核中线程的处理方法、装置和系统。以下分别进行详细说明。
实施例一、
本实施例将从内核中线程的处理装置的角度进行描述,该内核中线程的处理装置具体可以集成在SystemC内核中。
一种内核中线程的处理方法,包括:启动处理线程池,其中,该处理线程池用于对线程任务进行并行调度,该线程任务包括第一类线程任务和第二类线程任务;利用该处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;利用该处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
如图1所示,具体流程可以如下:
101、启动处理线程池。
其中,处理线程池用于对线程任务进行并行调度,其中,该线程任务可以包括第一类线程任务和第二类线程任务,该第一类线程任务和第二类线程任务可以根据实际应用的需求进行设置,比如,该第一类线程任务可以为实例(Method),第二类线程任务为线程(Thread);或者,也可以将第一类线程任务设置为Thread,而第二类线程任务设置为Method,等等。
需说明的是,该处理线程池可以是一个,也可以按照线程任务的类型设置多个,例如,如果线程任务包括第一类线程任务和第二类线程任务,则可以设置一个第一类线程任务的处理线程池,以及一个第二类线程任务的处理线程池,比如,设置一个Method的处理线程池和一个Thread的处理线程池。
如果分别设置了一个第一类线程任务的处理线程池,以及一个第二类线程任务的处理线程池,则具体在启动处理线程池时,可以同时启动这两个处理线程池,也可以先启动第一类线程任务的处理线程池,再执行完第一类线程任务的处理线程池中所有的线程任务后,再启动第二类线程任务的处理线程池,等等。
此外,在启动处理线程池之前,还可以先判断可执行列表是否为空,如果可执行列表为空,则说明当前没有需要执行的线程任务,那么可以不启动处理线程池,流程结束;而如果可执行列表不为空,则说明当前有需要执行的线程任务,那么此时才启动处理线程池,即在步骤“启动处理线程池”之前,该内核中线程的处理方法还可以包括:
判断可执行列表是否为空;
则此时,步骤“启动处理线程池”具体为:判断可执行列表不为空时,启动处理线程池。
或者,除了可以判断可执行列表是否为空之外,也可以判断可执行列表中的线程任务(包括第一类型线程任务和第二类型线程任务)是否大于1,如果小于等于1,则说明当前需要执行的线程任务很少,那么可以不启动处理线程池,按照现有的方式进行处理,比如,如果没有需要执行的线程任务,则流程结束,而如果只有一个需要执行的线程任务,则获取该需要执行的线程任务并进行执行,等等;反之,如果可执行列表中的线程任务大于1,则说明当前需要执行的线程任务较多,那么此时才启动处理线程池,即在步骤“启动处理线程池”之前,该内核中线程的处理方法还可以包括:
判断可执行列表中的线程任务是否大于1;
则此时,步骤“启动处理线程池”具体为:在判断可执行列表中的线程任务大于1时,启动处理线程池。
其中,该可执行列表主要用于记录待执行的线程任务,比如第一类线程任务和第二类线程任务(如Method和Thread)等,该可执行列表具体可以为Runnable列表。
102、利用该处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务。例如,具体可以如下:
(1)只设置一个处理线程池;
利用该启动的处理线程池,从可执行列表中并行获取第一类线程任务,若获取到第一类线程任务,则执行获取到的第一类线程任务;若获取不到第一类线程任务,则执行步骤103的(1)。
(2)设置一个第一类线程任务的处理线程池,以及一个第二类线程任务的处理线程池;
利用该第一类线程任务的处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;例如,具体可以如下:
如果这两个处理线程池(即第一类线程任务的处理线程池和第二类线程任务的处理线程池)是同时启动的,则具体可以利用该第一类线程任务的处理线程池,从可执行列表中并行获取第一类线程任务,若获取到第一类线程任务,则执行获取到的第一类线程任务;若获取不到第一类线程任务,则第一类线程任务处理结束。
如果这两个处理线程池(即第一类线程任务的处理线程池和第二类线程任务的处理线程池)是先后启动的,则具体可以利用该第一类线程任务的处理线程池,从可执行列表中并行获取第一类线程任务,若获取到第一类线程任务,则执行获取到的第一类线程任务;若获取不到第一类线程任务,则可以启动第二类线程任务的处理线程池(返回执行步骤101),然后执行步骤103中的(2)。
103、利用该处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。例如,具体可以如下:
(1)只设置一个处理线程池;
在步骤102中获取不到第一类线程任务,则利用该处理线程池,从可执行列表中并行获取第二类线程任务,若获取到第二类线程任务,则执行获取到的第二类线程任务;若获取不到第二类线程任务,则线程处理结束,并进行线程同步。
(2)设置一个第一类线程任务的处理线程池,以及一个第二类线程任务的处理线程池;
利用该第二类线程任务的处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。例如,具体可以如下:
利用该第二类线程任务的处理线程池,从可执行列表中并行获取第二类线程任务,若获取到第二类线程任务,则执行获取到的第二类线程任务;若获取不到第二类线程任务,则线程处理结束。
需说明的是,图1所示的各个步骤的执行顺序仅仅只是其中的一种情况,应当理解的是,步骤102和103的执行可以有先后关系,也可以没有先后关系,详见后面的实施例,在此不再赘述。
由上可见,本实施例通过引入处理线程池,然后在需要对线程进行处理时,启动该处理线程池,利用该处理线程池对线程任务进行并行调度,并对调度的线程任务进行执行,从而实现了第一类线程任务和第二类线程任务,比如Method和Thread等各个线程任务之间的并行处理,大大提高了仿真速度,而且可以更充分且有效地利用多核CPU资源的优越性,有利于提高系统性能。
根据实施例一所描述的方法,以下将在实施例二、三和四种分别举例作进一步详细说明。
实施例二、
在本实施例中,将以内核中线程的处理装置具体集成在SystemC内核中,且第一类线程任务为Method,第二类线程任务为Thread为例进行说明。则具体可以设置一个处理线程池,用于实现可执行列表中的Method和Thread的并行调度,也就是说,此时该内核中线程的处理装置可以包括SystemC内核调度核心模块(simcontext)和处理线程池。
其中,该处理线程池中可以包括N个用于处理线程任务的线程,其中,N为正整数,N的取值可以根据实际应用的需求进行设置,在此不再赘述。
如图2所示,一种内核中线程的处理方法,具体流程可以如下:
201、SystemC内核调度核心模块启动处理线程池,并将控制权移交给处理线程池。
其中,处理线程池用于对可执行列表中的线程任务进行并行调度,其中,该线程任务可以包括Method和Thread,即处理线程池中各个线程可以独立地从可执行列表中获取Method或Thread并进行执行,而无需有先后的执行顺序。
可选的,在启动处理线程池之前,还可以先判断可执行列表是否为空,如果可执行列表为空,则说明当前没有需要执行的线程任务,那么可以不启动处理线程池,流程结束;而如果可执行列表不为空,则说明当前有需要执行的线程任务,那么此时才启动处理线程池,即在步骤201之前,SystemC内核调度核心模块(simcontext)可以先判断可执行列表(比如Runnable列表)是否为空,若为空,则流程结束,若不为空,则执行步骤201。
或者,除了可以判断可执行列表是否为空之外,在启动处理线程池之前,也可以先判断的线程任务是否大于1,如果小于等于1,则说明当前需要执行的线程任务很少,那么可以不启动处理线程池,按照现有的方式进行处理;而如果可执行列表中的线程任务大于1,则说明当前需要执行的线程任务较多,那么此时才启动处理线程池,即在步骤201之前,SystemC内核调度核心模块可以先判断可执行列表(比如Runnable列表)中的线程任务是否大于1,如果小于等于1,则流程结束,若大于1,则执行步骤201。
202、处理线程池中的N个线程并行从可执行列表中获取第一类线程任务,即Method,若能够获取到Method,则执行获取到的Method;若获取不到Method,则表明Method处理完毕,于是执行步骤203。
例如,如果处理线程池中存在线程1、线程2、线程3……、和线程n,则“线程1、线程2、线程3……、和线程n”可以并行地从可执行列表中获取Method,若能获取到Method,则分别对获取到的Method进行执行;若获取不到Method,则表明Method处理完毕,于是执行步骤203。
203、处理线程池中的N个线程并行从可执行列表中获取第二类线程任务,即Thread,若能够获取到Thread,则执行获取到的Thread;若获取不到Thread,则表明Thread处理结束,于是执行步骤204。
例如,如果处理线程池中存在线程1、线程2、线程3……、和线程n,则“线程1、线程2、线程3……、和线程n”可以并行地从可执行列表中获取Thread,若能获取到Thread,则分别对获取到的Thread进行执行;若获取不到Method,则表明Thread处理结束,于是执行步骤204。
204、处理线程池中的N个线程之间进行线程同步。
205、处理线程池将控制权移交给SystemC内核调度核心模块,至此,线程任务调度完毕,流程结束。
需说明的是,也可以设置第一类线程任务为Thread,第二类线程任务为Method,其实现方式与上述类似,在此不再赘述。
由上可见,本实施例通过引入处理线程池,然后在需要对线程进行处理时,启动该处理线程池,利用该处理线程池对线程任务进行并行调度,并对调度的线程任务进行执行,从而实现了Method和Thread等各个线程任务之间的并行处理,大大提高了仿真速度,而且可以更充分且有效地利用多核CPU资源的优越性,有利于提高系统性能。
实施例三、
与实施二相同的是,在本实施例中,也以内核中线程的处理装置具体集成在SystemC内核中,且第一类线程任务为Method,第二类线程任务为Thread为例进行说明。与实施例二不同的是,在本实施例中,设置的处理线程池可以包括第一类线程任务的处理线程池和第二类线程任务的处理线程池,即分别设置一个Method的处理线程池和一个Thread的处理线程池,其中,实现Method的处理线程池用于实现可执行列表中的Method的并行调度,而Thread的处理线程池则用于实现可执行列表中的Thread的并行调度,也就是说,此时该内核中线程的处理装置可以包括SystemC内核调度核心模块(simcontext)、Method的处理线程池和Thread的处理线程池。
其中,该Method的处理线程池可以包括N1个用于处理Method的线程,同理,Thread的处理线程池中也可以包括N2个用于处理Thread的线程,其中,N1和N2均为正整数,N1和N2的取值可以根据实际应用的需求进行设置,在此不再赘述。
如图3所示,一种内核中线程的处理方法,具体流程可以如下:
301、SystemC内核调度核心模块(simcontext)判断可执行列表(比如Runnable列表)是否为空,若为空,则流程结束,若不为空,则执行步骤302。
或者,SystemC内核调度核心模块(simcontext)判断可执行列表(比如Runnable列表)中的线程任务(包括第一类型线程任务和第二类型线程任务)是否大于1,如果小于等于1,按照现有的方式进行处理;若可执行列表中的线程任务大于1,则执行步骤302。
需说明的是,图3中仅仅以判断可执行列表是否为空为例进行说明。
302、SystemC内核调度核心模块启动Method的处理线程池,并将控制权移交给Method的处理线程池。
其中,Method的处理线程池用于对可执行列表中的Method进行并行调度,即Method的处理线程池中的各个线程可以独立地对可执行列表中的Method进行调度并执行,而无需有先后的执行顺序。
303、Method的处理线程池的N1个线程并行从可执行列表中获取Method,若能够获取到Method,则执行获取到的Method;若获取不到Method,则表明Method处理完毕,于是执行步骤304。
例如,如果Method的处理线程池中存在线程1、线程2、线程3……、和线程n,则Method的处理线程池中的“线程1、线程2、线程3……、和线程n”可以并行地从可执行列表中获取Method,若能获取到Method,则分别对获取到的Method进行执行;若获取不到Method,则明Method处理完毕,于是将控制权移交给SystemC内核调度核心模块,并执行步骤304。
304、SystemC内核调度核心模块启动Thread的处理线程池,并将控制权移交给Thread的处理线程池。
其中,Thread的处理线程池用于对可执行列表中的Thread进行并行调度,即Thread的处理线程池中的各个线程可以独立地对可执行列表中的Thread进行调度并执行,而无需有先后的执行顺序。
305、Thread的处理线程池N2个线程并行从可执行列表中获取Thread,若能够获取到Thread,则执行获取到的Thread;若获取不到Thread,则表示Thread处理完毕,于是将控制权移交给SystemC内核调度核心模块。
例如,如果Thread的处理线程池中存在线程1、线程2、线程3……、和线程n,则Thread的处理线程池中的“线程1、线程2、线程3……、和线程n”可以并行地从可执行列表中获取Thread,若能获取到Thread,则分别对获取到的Thread进行执行;若获取不到Method,则表示Thread处理完毕,于是将控制权移交给SystemC内核调度核心模块。
至此,线程任务调度完毕,流程结束。
需说明的是,也可以设置第一类线程任务为Thread,第二类线程任务为Method,其实现方式与上述类似,在此不再赘述。
由上可见,本实施例通过引入Method的处理线程池和Thread的处理线程池,然后在需要对线程进行处理时,启动这些处理线程池,并由Method的处理线程池来实现对Method的并行调度,以及由Thread的处理线程池来实现Thread的并行调度,并由Method的处理线程池和Thread的处理线程池分别对各自调度的线程任务进行执行,从而实现了Method和Thread等各个线程任务之间的并行处理,大大提高了仿真速度,而且可以更充分且有效地利用多核CPU资源的优越性,有利于提高系统性能。
实施例四、
与实施例三相同的是,在本实施例中,设置的处理线程池同样可以包括第一类线程任务的处理线程池和第二类线程任务的处理线程池,即分别设置一个Method的处理线程池和一个Thread的处理线程池,具体可参见实施三,在此不再赘述;与实施例三不同的是,在实施例三中,Method的处理线程池和Thread的处理线程池的启动是有先后顺序的,而在本实施例中,将以同时启动Method的处理线程池和Thread的处理线程池为例进行说明。
如图4所示,一种内核中线程的处理方法,具体流程可以如下:
401、SystemC内核调度核心模块(simcontext)判断可执行列表(比如Runnable列表)是否为空,若为空,则流程结束,若不为空,则执行步骤402。
或者,SystemC内核调度核心模块(simcontext)判断可执行列表(比如Runnable列表)中的线程任务(包括第一类型线程任务和第二类型线程任务)是否大于1,如果小于等于1,则按照现有的方式进行处理;若可执行列表中的线程任务大于1,则执行步骤402。
需说明的是,图4中仅仅以判断可执行列表是否为空为例进行说明。
402、SystemC内核调度核心模块同时启动第一类线程任务的处理线程池和第二类线程任务的处理线程池,比如同时启动Method的处理线程池和Thread的处理线程池,并将控制权移交给Method的处理线程池和Thread的处理线程池。
403、Method的处理线程池的N1个线程并行从可执行列表中获取Method,若能够获取到Method,则执行获取到的Method;若获取不到Method,则表明Method处理完毕,Method的处理线程池将控制权移交给SystemC内核调度核心模块。
例如,如果Method的处理线程池中存在线程1、线程2、线程3……、和线程n,则Method的处理线程池中的“线程1、线程2、线程3……、和线程n”可以并行地从可执行列表中获取Method,若能获取到Method,则分别对获取到的Method进行执行;若获取不到Method,则明Method处理完毕,Method的处理线程池将控制权移交给SystemC内核调度核心模块。
404、Thread的处理线程池N2个线程并行从可执行列表中获取Thread,若能够获取到Thread,则执行获取到的Thread;若获取不到Thread,则表示Thread处理完毕,将控制权移交给SystemC内核调度核心模块。
例如,如果Thread的处理线程池中存在线程1、线程2、线程3……、和线程n,则Thread的处理线程池中的“线程1、线程2、线程3……、和线程n”可以并行地从可执行列表中获取Thread,若能获取到Thread,则分别对获取到的Thread进行执行;若获取不到Method,则表示Thread处理完毕,将控制权移交给SystemC内核调度核心模块。
其中,步骤403和404的执行可以部分先后。
当Method的处理线程池和Thread的处理线程池均将控制权移交给SystemC内核调度核心模块后,线程任务调度完毕,流程结束。
需说明的是,也可以设置第一类线程任务为Thread,第二类线程任务为Method,其实现方式与上述类似,在此不再赘述。
由上可见,本实施例通过引入Method的处理线程池和Thread的处理线程池,然后在需要对线程进行处理时,同时启动这些处理线程池(即同时启动Method的处理线程池和Thread的处理线程池),并由Method的处理线程池来实现对Method的并行调度,以及由Thread的处理线程池来实现Thread的并行调度,并由Method的处理线程池和Thread的处理线程池分别对各自调度的线程任务进行执行,从而实现了Method和Thread等各个线程任务之间的并行处理,大大提高了仿真速度,而且可以更充分且有效地利用多核CPU资源的优越性,有利于提高系统性能。
实施例五、
为了更好地实现以上方法,本发明实施例还相应地提供一种内核中线程的处理装置,如图5所示,该内核中线程的处理装置可以包括启动模块501、第一处理模块502和第二处理模块503。
启动模块501,用于启动处理线程池.
其中,处理线程池用于对线程任务进行并行调度,其中,该线程任务可以包括第一类线程任务和第二类线程任务,该第一类线程任务和第二类线程任务可以根据实际应用的需求进行设置,比如,该第一类线程任务可以为实例(Method),第二类线程任务为线程(Thread);或者,也可以将第一类线程任务设置为Thread,而第二类线程任务设置为Method,等等。
第一处理模块502,用于利用该处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务。
第二处理模块503,用于利用该处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
其中,该处理线程池可以是一个,也可以按照线程任务的类型设置多个,例如,如果线程任务包括第一类线程任务和第二类线程任务,则可以设置一个第一类线程任务的处理线程池,以及一个第二类线程任务的处理线程池,比如,设置一个Method的处理线程池和一个Thread的处理线程池。例如,具体可以如下:
(一)只设置一个处理线程池,则:
第一处理单元502,具体可以用于利用该处理线程池,从可执行列表中并行获取第一类线程任务,若获取到第一类线程任务,则执行获取到的第一类线程任务;若获取不到第一类线程任务,则触发第二处理单元503执行利用该处理线程池,从可执行列表中并行获取第二类线程任务的操作。
第二处理单元503,具体用于在所述第一处理单元502获取不到第一类线程任务时,利用该处理线程池,从可执行列表中并行获取第二类线程任务,若获取到第二类线程任务,则执行获取到的第二类线程任务;若获取不到第二类线程任务,则线程处理结束,并进行线程同步。
例如,以第一类线程任务为Method,第二类线程任务为Thread为例,则:
第一处理单元502,具体可以用于利用该处理线程池,从可执行列表中并行获取Method,若获取到Method,则执行获取到的Method;若获取不到Method,则触发第二处理单元503执行利用该处理线程池,从可执行列表中并行获取Thread的操作。
第二处理单元503,具体用于在所述第一处理单元502获取不到Method时,利用该处理线程池,从可执行列表中并行获取Thread,若获取到Thread,则执行获取到的Thread;若获取不到Thread,则线程处理结束,并进行线程同步。
又例如,以第一类线程任务为Thread,第二类线程任务为Method为例,则:
第一处理单元502,具体可以用于利用该处理线程池,从可执行列表中并行获取Thread,若获取到Thread,则执行获取到的Thread;若获取不到Thread,则触发第二处理单元503执行利用该处理线程池,从可执行列表中并行获取Method的操作。
第二处理单元503,具体用于在所述第一处理单元502获取不到Thread时,利用该处理线程池,从可执行列表中并行获取Method,若获取到Method,则执行获取到的Method;若获取不到Method,则线程处理结束,并进行线程同步。
(二)设置一个第一类线程任务的处理线程池,以及一个第二类线程任务的处理线程池。
如果分别设置了一个第一类线程任务的处理线程池,以及一个第二类线程任务的处理线程池,则具体在启动处理线程池时,可以同时启动这两个处理线程池,也可以先启动第一类线程任务的处理线程池,再执行完第一类线程任务的处理线程池中所有的线程任务后,再启动第二类线程任务的处理线程池,等等。例如,具体可以如下:
(1)同时启动这两个处理线程池;
启动单元501,具体可以用于同时启动第一类线程任务的处理线程池和第二类线程任务的处理线程池;
则此时,第一处理单元502,具体可以用于利用该第一类线程任务的处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;
例如,第一处理单元502,具体用于利用所述第一类线程任务的处理线程池,从可执行列表中并行获取第一类线程任务,若获取到第一类线程任务,则执行获取到的第一类线程任务;若获取不到第一类线程任务,则表明第一类线程任务处理完毕。
第二处理单元503,具体用于利用该第二类线程任务的处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
例如,第二处理单元503,具体用于利用所述第二类线程任务的处理线程池,从可执行列表中并行获取第二类线程任务,若获取到第二类线程任务,则执行获取到的第二类线程任务;若获取不到第二类线程任务,则表明第二类线程任务处理完毕。
(2)先后启动这两个处理线程池;
启动单元501,具体用于启动第一类线程任务的处理线程池,以及在第一处理单元将可执行列表中的所有第一类线程任务执行完毕后,启动第二类线程任务的处理线程池;
则此时,第一处理单元502,具体用于利用该第一类线程任务的处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;例如,具体可以如下:
第一处理单元502,具体可以用于利用该第一类线程任务的处理线程池,从可执行列表中并行获取第一类线程任务,若获取到第一类线程任务,则执行获取到的第一类线程任务;若获取不到第一类线程任务,则触发启动单元501启动第二类线程任务的处理线程池;
第二处理单元503,具体用于利用该第二类线程任务的处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。例如,具体可以如下:
第二处理单元503,具体可以用于利用该第二类线程任务的处理线程池,从可执行列表中并行获取第二类线程任务,若获取到第二类线程任务,则执行获取到的第二类线程任务;若获取不到第二类线程任务,则线程处理结束。
此外,在启动处理线程池之前,还可以先判断可执行列表是否为空,如果可执行列表为空,则说明当前没有需要执行的线程任务,那么可以不启动处理线程池,流程结束;而如果可执行列表不为空,则说明当前有需要执行的线程任务,那么此时才启动处理线程池,即该内核中线程的处理装置还可以包括判断单元;
判断单元,用于判断可执行列表是否为空;
则此时,启动单元501,具体用于在判断单元判断可执行列表不为空时,启动处理线程池。
或者,除了可以判断可执行列表是否为空之外,也可以判断可执行列表中的线程任务(包括第一类型线程任务和第二类型线程任务)是否大于1,如果小于等于1,则说明当前需要执行的线程任务很少,那么可以不启动处理线程池,按照现有的方式进行处理;而如果可执行列表中的线程任务大于1,则说明当前需要执行的线程任务较多,那么此时才启动处理线程池,即:
判断单元,用于判断可执行列表中的线程任务是否大于1;
则此时,启动单元501,具体用于在判断单元判断可执行列表中的线程任务大于1时,启动处理线程池。
该内核中线程的处理装置具体可以集成在SystemC内核中。
具体实现时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的实施例,在此不再赘述。
由上可见,本实施例通过引入处理线程池,然后在需要对线程进行处理时,由启动单元501启动该处理线程池,然后由第一处理单元502和第二处理单元503分别利用该处理线程池对线程任务进行并行调度,并对调度的线程任务进行执行,从而实现了第一类线程任务和第二类线程任务,比如Method和Thread等各个线程任务之间的并行处理,大大提高了仿真速度,而且可以更充分且有效地利用多核CPU资源的优越性,有利于提高系统性能。
实施例六、
相应的,本发明实施例还提供一种通信系统,包括本发明实施例提供的任一种内核中线程的处理装置,例如,具体可以如下:
内核中线程的处理装置,用于启动处理线程池,其中,该处理线程池用于对线程任务进行并行调度,该线程任务包括第一类线程任务和第二类线程任务;利用该处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;利用该处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
其中,该第一类线程任务和第二类线程任务可以根据实际应用的需求进行设置,比如,该第一类线程任务可以为Method,第二类线程任务为Thread;或者,也可以将第一类线程任务设置为Thread,而第二类线程任务设置为Method,等等。
需说明的是,该处理线程池可以是一个,也可以按照线程任务的类型设置多个,例如,如果线程任务包括第一类线程任务和第二类线程任务,则可以设置一个第一类线程任务的处理线程池,以及一个第二类线程任务的处理线程池,比如,设置一个Method的处理线程池和一个Thread的处理线程池。
如果分别设置了一个第一类线程任务的处理线程池,以及一个第二类线程任务的处理线程池,则具体在启动处理线程池时,可以同时启动这两个处理线程池,也可以先启动第一类线程任务的处理线程池,再执行完第一类线程任务的处理线程池中所有的线程任务后,再启动第二类线程任务的处理线程池,等等。
此外,在启动处理线程池之前,还可以先判断可执行列表是否为空,如果可执行列表为空,则说明当前没有需要执行的线程任务,那么可以不启动处理线程池,流程结束;而如果可执行列表不为空,则说明当前有需要执行的线程任务,那么此时才启动处理线程池。即:
内核中线程的处理装置,还可以用于判断可执行列表是否为空,若不为空,才启动处理线程池。
或者,除了可以判断可执行列表是否为空之外,也可以判断可执行列表中的线程任务是否大于1,如果小于等于1,则说明当前需要执行的线程任务很少,那么可以不启动处理线程池,按照现有的方式进行处理;而如果可执行列表中的线程任务大于1,则说明当前需要执行的线程任务较多,那么此时才启动处理线程池,即:
内核中线程的处理装置,还可以用于判断可执行列表中的线程任务是否大于1,如果大于1,才启动处理线程池。
该内核中线程的处理装置的具体实施方式可参见前面的实施例,在此不再赘述。
由上可见,本实施例的通信系统中的内核中线程的处理装置,可以通过引入处理线程池,然后在需要对线程进行处理时,启动该处理线程池,利用该处理线程池对线程任务进行并行调度,并对调度的线程任务进行执行,从而实现了第一类线程任务和第二类线程任务,比如Method和Thread等各个线程任务之间的并行处理,大大提高了仿真速度,而且可以更充分且有效地利用多核CPU资源的优越性,有利于提高系统性能。
实施例七、
此外,本发明实施例还提供一种通信设备,该通信设备具体可以为SystemC内核。如图6所示,该通信设备可以包括存储器601、收发接口602和处理器603;
存储器601,用于存储数据,具体可以被处理603和收发接口602等访问,所述存储器601可以包括高速随机存取存储器,还可以包括非易失性存储器,例如一个或多个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
收发接口602,用于收发数据,具体可以将设备的输入和输出外设连接到处理器6033和存储器601。
处理器603,用于启动处理线程池,其中,该处理线程池用于对线程任务进行并行调度,该线程任务包括第一类线程任务和第二类线程任务;利用该处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;利用该处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
其中,该第一类线程任务和第二类线程任务可以根据实际应用的需求进行设置,比如,该第一类线程任务可以为Method,第二类线程任务为Thread;或者,也可以将第一类线程任务设置为Thread,而第二类线程任务设置为Method,等等。
需说明的是,该处理线程池可以是一个,也可以按照线程任务的类型设置多个,例如,如果线程任务包括第一类线程任务和第二类线程任务,则可以设置一个第一类线程任务的处理线程池,以及一个第二类线程任务的处理线程池,比如,设置一个Method的处理线程池和一个Thread的处理线程池。
如果分别设置了一个第一类线程任务的处理线程池,以及一个第二类线程任务的处理线程池,则具体在启动处理线程池时,可以同时启动这两个处理线程池,也可以先启动第一类线程任务的处理线程池,再执行完第一类线程任务的处理线程池中所有的线程任务后,再启动第二类线程任务的处理线程池,等等。
此外,在启动处理线程池之前,还可以先判断可执行列表是否为空,如果可执行列表为空,则说明当前没有需要执行的线程任务,那么可以不启动处理线程池,流程结束;而如果可执行列表不为空,则说明当前有需要执行的线程任务,那么此时才启动处理线程池。即:
处理器603,还可以用于判断可执行列表是否为空,若不为空,才启动处理线程池。
或者,除了可以判断可执行列表是否为空之外,也可以判断可执行列表中的线程任务是否大于1,如果小于等于1,则说明当前需要执行的线程任务很少,那么可以不启动处理线程池,按照现有的方式进行处理;而如果可执行列表中的线程任务大于1,则说明当前需要执行的线程任务较多,那么此时才启动处理线程池,即:
处理器603,还可以用于判断可执行列表中的线程任务是否大于1,如果大于1,才启动处理线程池。
以上各个单元的具体实施可参见前面的实施例,在此不再赘述。
由上可见,本实施例的通信设备通过引入处理线程池,然后在需要对线程进行处理时,启动该处理线程池,利用该处理线程池对线程任务进行并行调度,并对调度的线程任务进行执行,从而实现了第一类线程任务和第二类线程任务,比如Method和Thread等各个线程任务之间的并行处理,大大提高了仿真速度,而且可以更充分且有效地利用多核CPU资源的优越性,有利于提高系统性能。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,RandomAccess Memory)、磁盘或光盘等。
以上对本发明实施例所提供的一种内核中线程的处理方法、装置和系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (15)
1.一种内核中线程的处理方法,其特征在于,包括:
启动处理线程池,所述处理线程池用于对线程任务进行并行调度,所述线程任务包括第一类线程任务和第二类线程任务,所述第一类线程任务为实例Method,所述第二类线程任务为线程Thread;或者,所述第一类线程任务为Thread,所述第二类线程任务为Method;
利用所述处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;
利用所述处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
2.根据权利要求1所述的方法,其特征在于,所述利用所述处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;利用所述处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务,包括:
利用所述处理线程池,从可执行列表中并行获取第一类线程任务;
若获取到第一类线程任务,则执行获取到的第一类线程任务;
若获取不到第一类线程任务,则利用所述处理线程池,从可执行列表中并行获取第二类线程任务;
若获取到第二类线程任务,则执行获取到的第二类线程任务;
若获取不到第二类线程任务,则线程处理结束,并进行线程同步。
3.根据权利要求1所述的方法,其特征在于,所述处理线程池包括第一类线程任务的处理线程池和第二类线程任务的处理线程池,则所述启动处理线程池;利用所述处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;利用所述处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务,包括:
同时启动第一类线程任务的处理线程池和第二类线程任务的处理线程池;
利用所述第一类线程任务的处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;
利用所述第二类线程任务的处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
4.根据权利要求1所述的方法,其特征在于,所述处理线程池包括第一类线程任务的处理线程池和第二类线程任务的处理线程池,则所述启动处理线程池;利用所述处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;利用所述处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务,包括:
启动第一类线程任务的处理线程池;
利用所述第一类线程任务的处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;
在可执行列表中的所有第一类线程任务执行完毕后,启动第二类线程任务的处理线程池;
利用所述第二类线程任务的处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
5.根据权利要求4所述的方法,其特征在于,所述利用所述第一类线程任务的处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;在可执行列表中的所有第一类线程任务执行完毕后,启动第二类线程任务的处理线程池;利用所述第二类线程任务的处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务,包括:
利用所述第一类线程任务的处理线程池,从可执行列表中并行获取第一类线程任务;
若获取到第一类线程任务,则执行获取到的第一类线程任务;
若获取不到第一类线程任务,则启动第二类线程任务的处理线程池,利用所述第二类线程任务的处理线程池,从可执行列表中并行获取第二类线程任务;
若获取到第二类线程任务,则执行获取到的第二类线程任务;
若获取不到第二类线程任务,则线程处理结束。
6.根据权利要求3至5任一项所述的方法,其特征在于,所述启动处理线程池之前,还包括:
判断可执行列表是否为空;
所述启动处理线程池具体为:判断可执行列表不为空时,启动处理线程池。
7.根据权利要求3至5任一项所述的方法,其特征在于,所述启动处理线程池之前,还包括:
判断可执行列表中的线程任务是否大于1;
所述启动处理线程池具体为:判断可执行列表中的线程任务大于1时,启动处理线程池。
8.一种内核中线程的处理装置,其特征在于,包括:
启动单元,用于启动处理线程池,所述处理线程池用于对线程任务进行并行调度,所述线程任务包括第一类线程任务和第二类线程任务;所述第一类线程任务为实例Method,所述第二类线程任务为线程Thread;或者,所述第一类线程任务为Thread,所述第二类线程任务为Method;
第一处理单元,用于利用所述处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;
第二处理单元,用于利用所述处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
9.根据权利要求8所述的内核中线程的处理装置,其特征在于,
所述第一处理单元,具体用于利用所述处理线程池,从可执行列表中并行获取第一类线程任务,若获取到第一类线程任务,则执行获取到的第一类线程任务;若获取不到第一类线程任务,则触发第二处理单元执行利用所述处理线程池,从可执行列表中并行获取第二类线程任务的操作;
所述第二处理单元,具体用于在所述第一处理单元获取不到第一类线程任务时,利用所述处理线程池,从可执行列表中并行获取第二类线程任务,若获取到第二类线程任务,则执行获取到的第二类线程任务;若获取不到第二类线程任务,则线程处理结束,并进行线程同步。
10.根据权利要求8所述的内核中线程的处理装置,其特征在于,所述处理线程池包括第一类线程任务的处理线程池和第二类线程任务的处理线程池,则:
所述启动单元,具体用于同时启动第一类线程任务的处理线程池和第二类线程任务的处理线程池;
所述第一处理单元,具体用于利用所述第一类线程任务的处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;
所述第二处理单元,具体用于利用所述第二类线程任务的处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
11.根据权利要求8所述的内核中线程的处理装置,其特征在于,所述处理线程池包括第一类线程任务的处理线程池和第二类线程任务的处理线程池,则:
所述启动单元,具体用于启动第一类线程任务的处理线程池,以及在第一处理单元将可执行列表中的所有第一类线程任务执行完毕后,启动第二类线程任务的处理线程池;
所述第一处理单元,具体用于利用所述第一类线程任务的处理线程池,从可执行列表中并行调度第一类线程任务,并执行调度的第一类线程任务;
所述第二处理单元,具体用于利用所述第二类线程任务的处理线程池,从可执行列表中并行调度第二类线程任务,并执行调度的第二类线程任务。
12.根据权利要求11所述的内核中线程的处理装置,其特征在于,
所述第一处理单元,具体用于利用所述第一类线程任务的处理线程池,从可执行列表中并行获取第一类线程任务,若获取到第一类线程任务,则执行获取到的第一类线程任务;若获取不到第一类线程任务,则触发启动单元启动第二类线程任务的处理线程池;
所述第二处理单元,具体用于利用所述第二类线程任务的处理线程池,从可执行列表中并行获取第二类线程任务,若获取到第二类线程任务,则执行获取到的第二类线程任务;若获取不到第二类线程任务,则线程处理结束。
13.根据权利要求10至12任一项所述的内核中线程的处理装置,其特征在于,还包括判断单元;
所述判断单元,用于判断可执行列表是否为空;
则所述启动单元,具体用于在判断单元判断可执行列表不为空时,启动处理线程池。
14.根据权利要求10至12任一项所述的内核中线程的处理装置,其特征在于,还包括判断单元;
所述判断单元,用于判断可执行列表中的线程任务是否大于1;
则所述启动单元,具体用于在判断可执行列表中的线程任务大于1时,启动处理线程池。
15.一种通信系统,其特征在于,包括权利要求8至14任一项所述的内核中线程的处理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310687462.0A CN103713944B (zh) | 2013-12-13 | 2013-12-13 | 一种内核中线程的处理方法、装置和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310687462.0A CN103713944B (zh) | 2013-12-13 | 2013-12-13 | 一种内核中线程的处理方法、装置和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103713944A CN103713944A (zh) | 2014-04-09 |
CN103713944B true CN103713944B (zh) | 2019-08-20 |
Family
ID=50406947
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310687462.0A Active CN103713944B (zh) | 2013-12-13 | 2013-12-13 | 一种内核中线程的处理方法、装置和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103713944B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104391742B (zh) * | 2014-11-11 | 2019-03-01 | 小米科技有限责任公司 | 应用优化方法和装置 |
CN106155803B (zh) * | 2015-04-07 | 2019-08-30 | 北大方正集团有限公司 | 一种基于信号量的线程池共享方法及系统 |
CN109783239B (zh) * | 2019-01-25 | 2021-01-15 | 上海创景信息科技有限公司 | SystemC仿真调度核的多线程优化方法、系统及介质 |
CN114116068B (zh) * | 2021-12-02 | 2023-06-02 | 重庆紫光华山智安科技有限公司 | 服务启动优化方法、装置、电子设备和可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102541653A (zh) * | 2010-12-24 | 2012-07-04 | 新奥特(北京)视频技术有限公司 | 一种多任务线程池调度方法和系统 |
CN102591721A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 一种分配线程执行任务的方法和系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8209701B1 (en) * | 2007-09-27 | 2012-06-26 | Emc Corporation | Task management using multiple processing threads |
US8209702B1 (en) * | 2007-09-27 | 2012-06-26 | Emc Corporation | Task execution using multiple pools of processing threads, each pool dedicated to execute different types of sub-tasks |
-
2013
- 2013-12-13 CN CN201310687462.0A patent/CN103713944B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102541653A (zh) * | 2010-12-24 | 2012-07-04 | 新奥特(北京)视频技术有限公司 | 一种多任务线程池调度方法和系统 |
CN102591721A (zh) * | 2011-12-30 | 2012-07-18 | 北京新媒传信科技有限公司 | 一种分配线程执行任务的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103713944A (zh) | 2014-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104615488B (zh) | 异构多核可重构计算平台上任务调度的方法和装置 | |
CN105487838B (zh) | 一种动态可重构处理器的任务级并行调度方法与系统 | |
CN106462395B (zh) | 多线程处理器架构中的线程等待 | |
Fang et al. | swdnn: A library for accelerating deep learning applications on sunway taihulight | |
CN103713944B (zh) | 一种内核中线程的处理方法、装置和系统 | |
CN102027452B (zh) | 调度器中的调度集合 | |
JP2020537784A (ja) | ニューラルネットワークアクセラレーションのための機械学習ランタイムライブラリ | |
CN102053870A (zh) | 亲和性驱动的分布式调度并行计算的系统和方法 | |
CN106250349A (zh) | 一种高能效异构计算系统 | |
CN104778083A (zh) | 异构多核可重构计算平台上任务调度的方法和装置 | |
TWI827792B (zh) | 多路徑神經網路、資源配置的方法及多路徑神經網路分析器 | |
JP2020537785A (ja) | ホスト通信されるマージされた重みと層単位命令のパッケージとを使用するニューラルネットワークアクセラレータによる多層ニューラルネットワーク処理 | |
CN103999051A (zh) | 用于着色器核心中着色器资源分配的策略 | |
CN104375805A (zh) | 采用多核处理器仿真可重构处理器并行计算过程的方法 | |
CN101625635B (zh) | 一种处理循环任务的方法、系统和设备 | |
CN101414271A (zh) | 多核平台下基于硬件计时器与任务队列的调度方法 | |
CN110597606B (zh) | 一种高速缓存友好的用户级线程调度方法 | |
CN104317770B (zh) | 用于众核处理系统的数据存储结构及数据访问方法 | |
CN107077390A (zh) | 一种任务处理方法以及网卡 | |
TW201232411A (en) | A high-parallelism synchronization approach for multi-core instruction-set simulation | |
CN106502770A (zh) | 一种基于有限状态机的hmi状态迁移方法 | |
CN111488051A (zh) | 基于cpu和fpga协同计算的云端深度神经网络优化方法 | |
CN109656868B (zh) | 一种cpu与gpu之间的内存数据转移方法 | |
CN109543217B (zh) | 串行等效的fpga并行布局方法 | |
CN103970714B (zh) | 用于共享功能逻辑的设备和方法及其可重配置处理器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |