一种多线程模式下的低功耗空闲等待方法

文档序号:9261057阅读:795来源:国知局
一种多线程模式下的低功耗空闲等待方法
【技术领域】
[0001]本发明涉及电通信技术领域,具体涉及一种多线程模式下的低功耗空闲等待方法。
【背景技术】
[0002]近年来,网络安全的课题被提到越来越重要的位置。说到网络安全,就不得不提到对于网络安全有着重要作用的深度包监测(DPI)系统等。
[0003]在当下高带宽高流量的情况下,为了满足实际需求,系统又必然都是多线程协同工作的。这些系统都是由数据包驱动的。大部分时间系统都会近乎满负荷运转,但是在一部分时间,系统是没有数据包驱动运转的。此刻,系统就需要使用usleep功能暂停并等待下一个包的到来。但是使用usle印功能有一个问题,将会使CPU处于高使用率的状态。CPU的使用率除了与运行的线程数量、线程本身的运算量以及CPU本身的性能有关,例如,在系统使用16个线程运行时,硬件环境!Intel Xeom CPU E5-4620,64核,如暂时无数据包驱动,所有的线程都不做任何工作,只是单纯的usleep的时候。即使所有线程都在通过usleep功能处于等待状态,也会使CPU的使用率到达近乎100%。
[0004]之所以选用usle印功能应对系统无数据包驱动的情况,是出于保障处理精确度的考量,而在实际的系统运转过程中,对处理精确度的要求并不统一,现有技术采用usleep功能实现的空闲等待方法,不能够灵活的根据处理精确度需求进行调整,从而使系统的CPU的使用率居高不下,这样不仅会提高系统的功耗,而且会降低系统的运行速度,无法使系统保持一较佳的运转状态。

【发明内容】

[0005]针对上述问题,为了让系统无数据包驱动运转的等待时间可以保持CPU较低的使用率,本发明的目的在于提供一种多线程模式下的低功耗空闲等待方法,其更加有效地控制线程的运行,在牺牲了一点精度的代价下,大大降低了 CPU的使用率。
[0006]为了实现上述目的,本发明采取的技术方案是:
[0007]一种多线程模式下的低功耗空闲等待方法,包括以下步骤:
[0008]I)当系统的多个线程需要进入等待状态时,创建一独立计时线程,用于针对调用系统提供的一条件等待函数;
[0009]2)当所述多个线程中的一空闲线程需要usleep时,判断调用条件:
[0010]2-1)如果精度要求高,直接调用usle印函数;
[0011]2-2)如果等待时间大于一设定阈值,直接调用usle印函数;
[0012]2-3)否则,调用条件等待函数,使所述空闲线程进入条件等待状态;
[0013]3)所述独立计时线程进行计时一个周期后,判断所述多个线程中是否存在等待唤醒的线程,如存在,则唤醒前述空闲线程;
[0014]4)进程退出时,关闭计时线程。
[0015]进一步地,所述系统为具有多个线程的一实施数据处理系统。
[0016]具体地,所述系统为一深度包监测(DPI)系统。
[0017]进一步地,所述条件等待函数为con_wait函数和con_signal函数。
[0018]进一步地,所述精度要求与系统的传输能力成正比。
[0019]具体地,如系统的带宽越大,则精度要求越高。
[0020]进一步地,所述设定阀值包括时间阈值t和线程数阈值η。
[0021]进一步地,所述设定阀值根据CPU性能、线程数及操作系统性能进行设定。
[0022]通过采取上述技术方案,本发明使同样的程序在系统中运行时,增加一个独立计时线程,但是,由于采用条件等待函数代替usleep函数实现空闲线程进入条件等待状态,而无需使系统的所有线程都处于usleep状态,从而大幅度地降低CPU的使用率。进而获得降低系统的功耗,提高系统的运行速度,使系统保持一较佳的运转状态,并延长系统的硬件寿命的技术效果。
【附图说明】
[0023]图1为本发明的多线程模式下的低功耗空闲等待方法的流程步骤图。
[0024]图2为本发明实施例中计算阈值(线程数η和等待时间t)的流程示意图。
【具体实施方式】
[0025]为使本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图作详细说明如下。
[0026]如图1所示,本发明的多线程模式下的低功耗空闲等待方法是一个可以大大降低CPU使用率和功耗的USle印替代方法。
[0027]该方法的主要步骤为:
[0028](I)当系统的多个线程需要进入等待状态时,创建一个独立的计时线程,用于针对的调用系统提供的条件等待函数;
[0029](2)当某线程需要usle印时,判断调用条件:
[0030]I)如果精度要求高,直接调用usle印函数;
[0031]2)如果等待时间大于设定阈值,直接调用usle印函数;
[0032]3)否则调用条件等待函数替代,本质是让多个线程进入条件等待状态;
[0033](3)线程计时一个周期后,判断是否存在等待唤醒的线程,如果存在则唤醒条件等待的线程;
[0034](4)进程退出时,关闭计时线程。
[0035]需要说明的是,对于频繁调用,大部分调用都只会涉及步骤(2)、(3),只有第一次调用才会涉及步骤(I),最后一次调用后才会涉及(4)。
[0036]本发明的核心技术构思在于:
[0037]usleep可以控制精度,只是当多个经常需要同时usleep的时候,即便精度稍低,还是会消耗大量的CPU资源,所以需要开启一个线程统一管理其他线程的等待。精度要求主要根据实际的用户需求,一般而言,精度要求与系统的传输能力成正比。例如当在一个局域网部署检测系统的时候,由于其带宽较小,网络上发包收包有限,精度要求就可以放低一些,也不会致使系统丢包等。
[0038]1、使用con_wait和con_signal实现usleep类似的功能;con_wait的作用是使进程进入等待状态,从而让出CPU等资源供其他线程使用,不会像usleep —样占用CPU。con_signal的作用是唤醒处于
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1