本发明属于协程执行效率技术领域,具体涉及一种基于协程的计算程序执行效率优化方法及系统。
背景技术:
在程序或服务开发过程中,经常会对数据、网络请求进行一些处理,尤其是数据量比较大时,程序往往会遇到阻塞。一个单线程遇到程序阻塞时,cpu会等待阻塞完毕后再进行接下来的逻辑处理,此时cpu的资源是浪费的。协程,英文名coroutine,又称微线程,纤程。协程本质上就是一个线程,以前线程任务的切换是由操作系统控制的,遇到阻塞自动切换,这样就可以在一个子任务阻塞时,使cpu切换到另一个子任务运行,保证cpu资源不浪费。但是协程终究还是在一个线程中进行的,适当的协程可以提高程序运算的效率,但是过多的协程则会起到反效果。
程序运行中遇到阻塞io或者阻塞执行,占用阻塞时间不长,实际开发中往往会忽略该阻塞时间的占用,往往一个线程就直接从头到尾阻塞执行。通常对于阻塞io,往往利用协程切换另外一个非阻塞任务进行执行,当阻塞完毕后再将cpu资源分配回来。虽然协程可以解决任务阻塞的问题,效率也有所提升,但是面对大批量任务时,执行时间以小时为单位的情况下,执行效率和数据吞吐量仍然是性能提升的瓶颈。
此为现有技术的不足,因此,针对现有技术中的上述缺陷,提供一种基于协程的计算程序执行效率优化方法及系统,是非常有必要的。
技术实现要素:
针对现有技术的上述计算机程序执行遇到阻塞时,协程可以解决阻塞,但是当大批量任务时,执行效率和数据吞吐量仍是性能提升瓶颈的缺陷,本发明提供一种基于协程的计算程序执行效率优化方法及系统,以解决上述技术问题。
第一方面,本发明提供一种基于协程的计算程序执行效率优化方法,包括如下步骤:
s1.启动协程调度器为每个任务分配协程,并启动协程计时任务;
s2.cpu判断是否所有协程任务均进入阻塞;
若是,协程调度器启动计时协程进行阻塞计时;
若否,进入步骤s4;
s3.cpu实时判断是否有协程任务解除阻塞;
若是,停止阻塞计时,统计阻塞时长;
若否,返回步骤s3;
s4.cpu等待协程任务执行完毕;
s5.cpu判断是否协程调度器中只有协程计时任务;
若是,停止协程计时,统计任务总时长,进入步骤s6;
若否,返回步骤s1;
s6.cpu计算运行效率,计算数据吞吐量,再根据运行效率和数据吞吐量调整协程任务数量,实现计算程序执行效率的优化。
进一步地,步骤s1之前还包括如下步骤:
s1`.cpu判断系统中是否存在多协程;
若否,进入步骤s7;
若是,进入步骤s1;
s7.cpu创建任务,设定各任务并行,并设定单协程计时;
s8.cpu判断各任务是否进入阻塞;
若是,启动单协程计时,直至阻塞结束;进入步骤s9;
若否,进入步骤s9;
s9.cpu等待所有任务执行完毕,输出单协程计时。程序为单协程时,协程只用于计时,各任务并行。
进一步地,步骤s6具体步骤如下:
s61.cpu根据统计的阻塞时长及任务总时长,计算运行效率;
s62.cpu判断运行效率是否达到设定效率阈值;
若是,进入步骤s63;
若否,进入步骤s64;
s63.cpu根据协程任务数量及单个协程任务处理数据量,计算数据吞吐量,并判断数据吞吐量是否达到设定数据量阈值;
若是,输出优化后的协程数量方案;结束;
若否,进入步骤s64;
s64.添加协程,返回步骤s1。通过cpu对运行效率进行计算,在运行效率达不到设定效率阈值时,不断的往协程调度器中添加协程任务,直到运行效率达到设定效率阈值。
进一步地,步骤s61具体步骤如下:
s611.cpu设定统计的阻塞时长为t1;
s612.cpu设定统计的任务总时长为t;
s613.cpu计算运行效率η=(t-t1)/t。
进一步地,步骤s63具体步骤如下:
s631.cpu获取协程任务数量n1,获取单个协程任务处理的数据量b,获取任务总时长t,计算数据吞吐量=n1*b/t;
s632.cpu判断本次数据吞吐量是否小于上次数据吞吐量;
若是,进入步骤s633;
若否,进入步骤s64;
s633.输出当前任务数量及协程数量方案。当运行效率达到设定效率阈值时,计算单位时间内处理的数据量,且不断的往协程调度器中添加协程任务,当单位时间内处理的数据量出现下降时,停止添加,此时便是程序执行的最优方案。
进一步地,步骤s1中还包括如下步骤:
协程调度器判断是否为阻塞后添加的协程分配任务;
若是,为非阻塞任务分配协程;
若否,为每个任务均分配协程。非阻塞任务即可以使得cpu持续工作的任务,而非cpu瞬时执行后又进入等待的任务。
第二方面,本发明提供一种基于协程的计算程序执行效率优化系统,包括:
协程分配模块,用于启动协程调度器为每个任务分配协程,并启动协程计时任务;
阻塞第一判断模块,用于通过cpu判断是否所有协程任务均进入阻塞;
阻塞计时模块,用于当所有协程任务均进入阻塞时,通过协程调度器启动计时协程进行阻塞计时,并在有协程任务解除阻塞时,停止阻塞计时,统计阻塞时长;
阻塞解除判断模块,用于通过cpu实时判断是否有协程任务解除阻塞;
任务执行等待模块,用于通过cpu等待协程任务执行完毕;
协程计时模块,用于当协程调度器中只有协程计时任务时,停止协程计时,统计任务总时长;
执行效率优化模块,用于通过cpu计算运行效率,计算数据吞吐量,再根据运行效率和数据吞吐量调整协程任务数量,实现计算程序执行效率的优化。
进一步地,还包括:
多协程判断模块,用于通过cpu判断系统中是否存在多协程;
单协程计时设置模块,用于在系统中不存在多协程时,通过cpu创建任务,设定各任务并行,并设定单协程计时;
阻塞第二判断模块,用于在不存在多协程时,通过cpu判断各任务是否进入阻塞;
单协程计时启动模块,用于在不存在多协程,且进入阻塞时,启动单协程计时,直至阻塞结束;
单协程计时输出模块,用于通过cpu等待所有任务执行完毕,输出单协程计时。
进一步地,执行效率优化模块包括:
运行效率计算单元,用于通过cpu根据统计的阻塞时长及任务总时长,计算运行效率;
运行效率判断单元,用于通过cpu判断运行效率是否达到设定效率阈值;
数据吞吐量计算及判断单元,用于当运行效率达到设定效率阈值时,通过cpu根据协程任务数量及单个协程任务处理数据量,计算数据吞吐量,并判断数据吞吐量是否达到设定数据量阈值;
优化后方案输出单元,用于当数据吞吐量达到设定数据量阈值时,输出优化后的协程数量方案;
协程添加单元,用于当运行效率未达到设定效率阈值时,或者当数据吞吐量未达到设定数据量阈值时,添加协程。
进一步地,协程分配模块还用于通过协程调度器判断是否为阻塞后添加的协程分配任务,并为阻塞后协程分配非阻塞任务。
本发明的有益效果在于,
本发明提供的基于协程的计算程序执行效率优化方法及系统,解决大量任务执行的情况下,计算效率,并对协程数量进行优化的问题,使计算效率及数据吞吐量都达到最高,用时最短。
本发明实现程序开发过程中,充分调度易阻塞函数,且通过运行效率来断定该程序有无cpu的资源浪费,同时为程序优化提供了数据参考,也为一些高性能高处理量的场景提供了最优方案。
此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著的进步,其实施的有益效果也是显而易见的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明的方法流程示意图一;
图2是本发明的方法流程示意图二;
图3为本发明的系统示意图;
图中,1-协程分配模块;2-阻塞第一判断模块;3-阻塞计时模块;4-阻塞解除判断模块;5-任务执行等待模块;6-协程计时模块;7-执行效率优化模块;7.1-运行效率计算单元;7.2-运行效率判断单元;7.3-数据吞吐量计算及判断单元;7.4-优化后方案输出单元;7.5-协程添加单元;8-多协程判断模块;9-单协程计时设置模块;10-阻塞第二判断模块;11-单协程计时启动模块;12-单协程计时输出模块。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
如图1所示,本发明提供一种基于协程的计算程序执行效率优化方法,包括如下步骤:
s1.启动协程调度器为每个任务分配协程,并启动协程计时任务;
s2.cpu判断是否所有协程任务均进入阻塞;
若是,协程调度器启动计时协程进行阻塞计时;
若否,进入步骤s4;
s3.cpu实时判断是否有协程任务解除阻塞;
若是,停止阻塞计时,统计阻塞时长;
若否,返回步骤s3;
s4.cpu等待协程任务执行完毕;
s5.cpu判断是否协程调度器中只有协程计时任务;
若是,停止协程计时,统计任务总时长,进入步骤s6;
若否,返回步骤s1;
s6.cpu计算运行效率,计算数据吞吐量,再根据运行效率和数据吞吐量调整协程任务数量,实现计算程序执行效率的优化。
在本发明的一些实施例中,如图2所示,s6.cpu计算运行效率,计算数据吞吐量,再根据运行效率和数据吞吐量调整协程任务数量,实现计算程序执行效率的优化;具体步骤如下:
s61.cpu根据统计的阻塞时长及任务总时长,计算运行效率;具体步骤如下:
s611.cpu设定统计的阻塞时长为t1;
s612.cpu设定统计的任务总时长为t;
s613.cpu计算运行效率η=(t-t1)/t;
s62.cpu判断运行效率是否达到设定效率阈值;
若是,进入步骤s63;
若否,进入步骤s64;
s63.cpu根据协程任务数量及单个协程任务处理数据量,计算数据吞吐量,并判断数据吞吐量是否达到设定数据量阈值;
若是,输出优化后的协程数量方案;结束;
若否,进入步骤s64;
s64.添加协程,返回步骤s1。
而,步骤s63具体步骤如下:
s631.cpu获取协程任务数量n1,获取单个协程任务处理的数据量b,获取任务总时长t,计算数据吞吐量=n1*b/t;
s632.cpu判断本次数据吞吐量是否小于上次数据吞吐量;
若是,进入步骤s633;
若否,进入步骤s64;
s633.输出当前任务数量及协程数量方案。
在本发明的一些实施例中,如图2所示,步骤s1之前还包括如下步骤:
s1`.cpu判断系统中是否存在多协程;
若否,进入步骤s7;
若是,进入步骤s1;
s7.cpu创建任务,设定各任务并行,并设定单协程计时;
s8.cpu判断各任务是否进入阻塞;
若是,启动单协程计时,直至阻塞结束;进入步骤s9;
若否,进入步骤s9;
s9.cpu等待所有任务执行完毕,输出单协程计时。
如图3所示,本发明提供一种基于协程的计算程序执行效率优化系统,包括:协程分配模块1,用于启动协程调度器为每个任务分配协程,并启动协程计时任务;
阻塞第一判断模块2,用于通过cpu判断是否所有协程任务均进入阻塞;
阻塞计时模块3,用于当所有协程任务均进入阻塞时,通过协程调度器启动计时协程进行阻塞计时,并在有协程任务解除阻塞时,停止阻塞计时,统计阻塞时长;
阻塞解除判断模块4,用于通过cpu实时判断是否有协程任务解除阻塞;
任务执行等待模块5,用于通过cpu等待协程任务执行完毕;
协程计时模块6,用于当协程调度器中只有协程计时任务时,停止协程计时,统计任务总时长;
执行效率优化模块7,用于通过cpu计算运行效率,计算数据吞吐量,再根据运行效率和数据吞吐量调整协程任务数量,实现计算程序执行效率的优化;执行效率优化模块7包括:
运行效率计算单元7.1,用于通过cpu根据统计的阻塞时长及任务总时长,计算运行效率;
运行效率判断单元7.2,用于通过cpu判断运行效率是否达到设定效率阈值;
数据吞吐量计算及判断单元7.3,用于当运行效率达到设定效率阈值时,通过cpu根据协程任务数量及单个协程任务处理数据量,计算数据吞吐量,并判断数据吞吐量是否达到设定数据量阈值;
优化后方案输出单元7.4,用于当数据吞吐量达到设定数据量阈值时,输出优化后的协程数量方案;
协程添加单元7.5,用于当运行效率未达到设定效率阈值时,或者当数据吞吐量未达到设定数据量阈值时,添加协程;
多协程判断模块8,用于通过cpu判断系统中是否存在多协程;
单协程计时设置模块9,用于在系统中不存在多协程时,通过cpu创建任务,设定各任务并行,并设定单协程计时;
阻塞第二判断模块10,用于在不存在多协程时,通过cpu判断各任务是否进入阻塞;
单协程计时启动模块11,用于在不存在多协程,且进入阻塞时,启动单协程计时,直至阻塞结束;
单协程计时输出模块12,用于通过cpu等待所有任务执行完毕,输出单协程计时。
上述实施例中,协程分配模块1还用于通过协程调度器判断是否为阻塞后添加的协程分配任务,并为阻塞后协程分配非阻塞任务。
尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。