System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及智能控制器系统设计,尤其涉及一种基于多核心工作线程上的协程调度方法、系统及设备。
技术介绍
1、随着计算机技术的发展,进程、线程和协程成为了现代计算中不可或缺的概念。进程是计算机中正在运行的程序的实例,线程是操作系统进行调度的最小执行单位,而协程则是一种更为轻量级的线程,具有独立的执行流程和上下文切换的能力。协程特别适合处理多io的情况,可以避免线程频繁切换的开销。
2、然而,在当前的多核心架构下,多核心处理器已经成为一种成熟的技术。尽管一个线程内可以包含多个协程,并且可以在这些协程之间进行切换,但是这些协程仍然是串行执行的,只能在一个线程内运行,无法充分利用cpu多核心的计算能力。
3、在智能水电站等领域,io数据密集型的应用非常常见。例如,监测设备通过传感器获取数据,控制系统通过执行器发送指令,远程操作需要进行网络通信等。这些io操作需要不断地与外部设备进行交互,导致系统的性能瓶颈主要集中在io层面。因此,如何设计一种基于多核心工作线程上的协程调度方法,以最大化发挥硬件性能并充分利用多核能力,成为该领域技术人员迫切希望解决的一个问题。
技术实现思路
1、有鉴于此,有必要提供一种基于多核心工作线程上的协程调度方法、系统及设备,用以解决现有技术中如何利用多核能力和协程概念提高io效率的问题。
2、为达到上述技术目的,本专利技术采取了以下技术方案:
3、第一方面,本专利技术提供了一种基于多核心工作线程上的协程调度方法,包括
4、为每个io线程分别建立一个协程队列,每个io线程分别运行于不同的核心;
5、获取多个io任务,为每个io任务建立一个io协程;
6、获取每个io协程相对于不同协程队列的响应比、每个协程队列中已存在的io协程的数量以及每个核心的负载指数,并得到每个io协程相对于不同协程队列的调度优先值;
7、根据每个io协程相对于不同协程队列的调度优先值,将多个io协程分配至不同的协程队列中。
8、进一步的,所述获取每个io协程相对于不同协程队列的响应比、每个协程队列中已存在的io协程的数量以及每个核心的负载指数,并得到每个io协程相对于不同协程队列的调度优先值,包括:
9、获取目标io协程相对于目标协程队列的响应比,其中所述目标io协程为当前待分析的一个io协程,所述目标协程队列为当前待分析的一个协程队列;
10、获取所述目标协程队列中已存在的io协程的数量作为第一数值,以及运行所述目标协程队列对应的io线程的核心中已存在的协程总数作为第二数值,根据所述第一数值和第二数值的比值,得到io协程占比;
11、获取运行所述目标协程队列对应的io线程的核心的负载指数;
12、根据所述目标io协程相对于所述目标协程队列的响应比、io协程占比和运行所述目标协程队列对应的io线程的核心的负载指数,得到所述目标io协程相对于所述目标协程队列的调度优先值。
13、进一步的,所述目标io协程相对于所述目标协程队列的调度优先值,通过下式得到:
14、pri=a×rres+b×rocc+c×rload
15、其中,pri为所述目标io协程相对于所述目标协程队列的调度优先值,rres为所述目标io协程相对于所述目标协程队列的响应比,ross为io协程占比,rload为运行所述目标协程队列对应的io线程的核心的负载指数,a、b和c分别为不同的权重系数。
16、进一步的,所述获取目标io协程相对于目标协程队列的响应比,包括:
17、获取目标协程队列中已存在的io协程的数量,以及所述目标io协程的服务时间;
18、根据所述目标协程队列中已存在的io协程的数量和所述目标io协程的服务时间,得到所述目标io协程相对于所述目标协程队列的响应比。
19、进一步的,所述目标io协程相对于所述目标协程队列的响应比,通过下式得到:
20、
21、其中,ncoro为所述目标协程队列中已存在的io协程的数量,tserv为所述目标io协程的服务时间,d和e分别为不同的单位调整系数。
22、进一步的,所述负载指数为核心的cpu使用率。
23、进一步的,所述根据每个io协程相对于不同协程队列的调度优先值,将多个io协程分配至不同的协程队列中,包括:
24、获取所述目标io协程相对于多个协程队列的多个调度优先值作为多个目标调度优先值,并比较多个目标调度优先值的大小;
25、若存在唯一的最大的目标调度优先值,则将所述目标io协程分配给最大的目标调度优先值对应的协程队列;
26、若存在多个相同的最大的目标调度优先值,则将所述目标io协程分配给多个相同的最大的目标调度优先值对应的多个协程队列中,最近一次分配有io协程的协程队列。
27、第二方面,本专利技术还提供了一种基于多核心工作线程上的协程调度系统,包括:
28、线程池创建模块,用于为每个io线程分别建立一个协程队列,每个io线程分别运行于不同的核心;
29、协程池创建模块,用于获取多个io任务,为每个io任务建立一个io协程;
30、优先值分析模块,用于获取每个io协程相对于不同协程队列的响应比、每个协程队列中已存在的io协程的数量以及每个核心的负载指数,并得到每个io协程相对于不同协程队列的调度优先值;
31、协程调度模块,用于根据每个io协程相对于不同协程队列的调度优先值,将多个io协程分配至不同的协程队列中。
32、第三方面,本专利技术还提供了一种电子设备,包括存储器和处理器,其中,
33、存储器,用于存储程序;
34、处理器,与存储器耦合,用于执行存储器中存储的程序,以实现上述任一种实现方式中的基于多核心工作线程上的协程调度方法中的步骤。
35、第四方面,本专利技术还提供了一种计算机可读存储介质,用于存储计算机可读取的程序或指令,程序或指令被处理器执行时,能够实现上述任一种实现方式中的基于多核心工作线程上的协程调度方法中的步骤。
36、本专利技术提供一种基于多核心工作线程上的协程调度方法、系统及设备,其为每个运行于不同核心的io线程分别建立一个协程队列,同时为每个io任务建立一个io协程,然后获取每个io协程相对于不同协程队列的响应比、每个协程队列中已存在的io协程的数量以及每个核心的负载指数,并得到每个io协程相对于不同协程队列的调度优先值,最后根据每个io协程相对于不同协程队列的调度优先值,将多个io协程分配至不同的协程队列中。相比于现有技术,本专利技术为每个io线程配备一个协程队列,通过响应比、已存在的io协程数量和负载指数三个方面进行分析,通过调度优先值将多个io协程均衡地分配给多个io线程。通过协程调度的方式提高了io的运行效率,最重要的是,本专利技术的大部分步骤均可以在用户态本文档来自技高网...
【技术保护点】
1.一种基于多核心工作线程上的协程调度方法,其特征在于,包括:
2.根据权利要求1所述的基于多核心工作线程上的协程调度方法,其特征在于,所述获取每个IO协程相对于不同协程队列的响应比、每个协程队列中已存在的IO协程的数量以及每个核心的负载指数,并得到每个IO协程相对于不同协程队列的调度优先值,包括:
3.根据权利要求2所述的基于多核心工作线程上的协程调度方法,其特征在于,所述目标IO协程相对于所述目标协程队列的调度优先值,通过下式得到:
4.根据权利要求3所述的基于多核心工作线程上的协程调度方法,其特征在于,所述获取目标IO协程相对于目标协程队列的响应比,包括:
5.根据权利要求4所述的基于多核心工作线程上的协程调度方法,其特征在于,所述目标IO协程相对于所述目标协程队列的响应比,通过下式得到:
6.根据权利要求2所述的基于多核心工作线程上的协程调度方法,其特征在于,所述负载指数为核心的CPU使用率。
7.根据权利要求2所述的基于多核心工作线程上的协程调度方法,其特征在于,所述根据每个IO协程相对于不同协程队
8.一种基于多核心工作线程上的协程调度系统,其特征在于,包括:
9.一种电子设备,其特征在于,包括存储器和处理器,其中,
10.一种计算机可读存储介质,其特征在于,用于存储计算机可读取的程序或指令,所述程序或指令被处理器执行时,能够实现上述权利要求1至7中任一项所述基于多核心工作线程上的协程调度方法中的步骤。
...【技术特征摘要】
1.一种基于多核心工作线程上的协程调度方法,其特征在于,包括:
2.根据权利要求1所述的基于多核心工作线程上的协程调度方法,其特征在于,所述获取每个io协程相对于不同协程队列的响应比、每个协程队列中已存在的io协程的数量以及每个核心的负载指数,并得到每个io协程相对于不同协程队列的调度优先值,包括:
3.根据权利要求2所述的基于多核心工作线程上的协程调度方法,其特征在于,所述目标io协程相对于所述目标协程队列的调度优先值,通过下式得到:
4.根据权利要求3所述的基于多核心工作线程上的协程调度方法,其特征在于,所述获取目标io协程相对于目标协程队列的响应比,包括:
5.根据权利要求4所述的基于多核心工作线程上的协程调度方法,其特征在于,所述目标io...
【专利技术属性】
技术研发人员:蔡航,李海军,杨张斌,廖湘,蔡熹,彭代晓,陈飞宇,刘攀,连雪广,敖成彦,李红辉,李志报,
申请(专利权)人:中国三峡建工集团有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。