CN114064293B - 一种基于轮询的无锁限速方法、装置及存储介质 - Google Patents
一种基于轮询的无锁限速方法、装置及存储介质 Download PDFInfo
- Publication number
- CN114064293B CN114064293B CN202111422684.0A CN202111422684A CN114064293B CN 114064293 B CN114064293 B CN 114064293B CN 202111422684 A CN202111422684 A CN 202111422684A CN 114064293 B CN114064293 B CN 114064293B
- Authority
- CN
- China
- Prior art keywords
- speed limit
- thread
- distribution
- time
- speed
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Small-Scale Networks (AREA)
Abstract
本发明提供一种基于轮询的无锁限速方法、装置及存储介质,所述方法包括:获取当前CPU队列对应的总限速信息;根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的未适配的次数,生成每个线程的第N+1次限速信息;根据每个线程的第N+1次限速信息,采用独立令牌算法对CPU队列中对应的线程进行限速;其中,N大于或等于1。通过所述方法,有效提高了并发模型的限速效率。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种基于轮询的无锁限速方法、装置及存储介质。
背景技术
常见的并发模型一般包括3类,基于线程与锁的内存共享模型,actor模型和CSP模型,其中尤以线程与锁的共享内存模型最为常见。基于锁的共享内存模型与后两者的主要区别在于,到底是通过共享内存来通信,还是通过通信来实现访问共享内存。基于线程与锁的内存共享模型本质是为了充分利用多核CPU资源,提高性能,但为了保证并发的正确性,通常需要通过内存来协调并发,以保证程序正确运转。为缓解并发模型资源利用率的问题,又引入线程池模型,即就是预先创建好一批线程,并且加大线程的复用能力,将线程数控制在一定数目内,缓解上下文切换开销。这种模型下多个线程需要访问共享资源时通常需要锁来保护共享资源并发访问,如果锁发生冲突,线程需要睡眠来等待排队获取锁,即就是线程在执行过程中遇到锁等待,那么线程挂起,极大影响了模型的性能。此时IO对应的限速就成为一种共享资源,同时也需要加锁来保护并访问。
而对IO传统的限速做法,是将限速值等值切割成若干小块的时间窗口,并求得每个小块时间窗口对应的允许通过的数据量,此小块时间窗口及其允许通过的数据量称之为令牌,系统按所述小块时间窗口对应的时间为周期匀速将令牌放入共享队列。当请求到达各个业务处理线程时,各个线程从共享队列中争抢令牌,拿到满足请求要求的数据量大小的令牌继续处理,否则继续等待共享队列中有足够的令牌。系统放入共享队列和业务线程从共享队列中争抢令牌需要加锁。而多个线程争抢锁的过程会导致锁等待,而线程通常和CPU一对一绑定,线程挂起即CPU挂起,严重影响处理性能。而在基于轮询的无锁高性能并发模型下,线程和CPU一对一绑定,线程间通信使用无锁队列,通常一对一的模型,业务处理过程需要避免加锁,因而不适用共享队列传递令牌的机制。
发明内容
有鉴于此,本发明提供了一种基于轮询的无锁限速方法、装置及存储介质,以解决现有技术中的并发线程模型限速效率较低的技术问题。
第一方面,根据本发明实施例提供的一种基于轮询的无锁限速方法,用于对CPU队列中的线程限速,所述包括:
获取当前CPU队列对应的总限速信息;
根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的未适配的次数,生成每个线程的第N+1次限速信息;
根据每个线程的第N+1次限速信息,采用独立令牌算法对CPU队列中对应的线程进行限速;
其中,N大于或等于1。
优选地,所述根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的未适配的次数,生成每个线程的第N+1次限速信息,包括:
采用预设数学模型,根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的限速未适配的次数,生成每个线程的第N+1次限速信息;
所述预设数学模型为:
Di(N+1)=S/A*(Ci(N)/AVGC)
其中,Di(N+1)表示线程i于第N+1次限速分配中分得的限速,S表示总限速,A表示CPU队列中线程的个数,Ci(N)表示前N次分配限速中线程i未适配的次数,AVGC表示前N次分配限速中每个线程未适配的平均次数。
优选地,所述根据每个线程的第N+1次限速信息,采用独立令牌算法对CPU队列中对应的线程进行限速,包括:
基于预先设定的单个令牌的数据量,根据线程i的第N+1次限速信息Di(N+1)确定单个令牌的生成频率;
将单位时间内以所述生成频率生成的令牌放入线程i的独占队列,以对CPU队列中的线程i进行限速。
优选地,所述方法还包括:
确定每个线程的第1次限速信息;
所述确定每个线程的第1次限速信息,包括:
根据第一次限速分配前总限速信息、CPU队列中线程的个数计算得到每个线程的平均限速,将所述平均限速确定为每个线程的第1次限速;
确定第一次限速分配的数学公式为:Di=S1/A;
其中,Di为第一次限速分配后每个线程i(1≤i≤A)分配的限速,S1为第一次限速分配前的总限速信息,A为CPU队列中线程的个数。
优选地,所述方法还包括:
确定N次限速分配中每个线程是否适配;
所述确定N次限速分配中每个线程是否适配,包括:
在第一次限速分配之前,预先设定每个线程未适配的初始次数为1;
在第m次限速分配中,若线程i处理请求的实际速度超过线程i在第m次分配限速中分得的限速,则线程i在第m次限速分配中未适配;其中,m=1,……N。
优选地,所述方法还包括:
计算前N次分配限速中每个线程的未适配的次数;
其中,在第p次限速分配中,若线程i的实际限速大于分得的限速信息Di(p),则确定第p次适配中线程i未适配,线程i对应的未适配的次数加1,否则加0,其中1≤p≤N;
累计相加计算得到线程i前N次分配限速中未适配次数,并作为第N+1次限速分配时的Ci(N)。
优选地,所述方法还包括:
在第N次限速分配之后、第N+1次限速分配之前,CPU至少轮询线程i的独占队列一次。
优选地,所述CPU轮询线程i的独占队列的时间间隔与限速分配的时间间隔保持同步。
第二方面,根据本发明实施例提供的一种基于轮询的无锁限速装置,包括:
获取模块,用于获取当前CPU队列对应的总限速信息;
生成模块,用于根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的未适配的次数,生成每个线程的第N+1次限速信息;
限速模块,用于根据每个线程的第N+1次限速信息,采用独立令牌算法对CPU队列中对应的线程进行限速;
其中,N大于或等于1。
第三方面,根据本发明实施例提供的一种基于轮询的无锁限速装置,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而实现第一方面任一项所述的基于轮询的无锁限速方法。
第四方面,根据本发明实施例提供的一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储有计算机指令,所述计算机指令被处理器执行时实现第一方面任一项所述的基于轮询的无锁限速方法。
本发明实施例提供的基于轮询的无锁限速方法、装置及存储介质,至少具有如下有益效果:
本发明实施例提供的基于轮询的无锁限速方法、装置及存储介质,可以通过获取CPU队列对应的总限速信息;根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的未适配的次数,生成每个线程的第N+1次限速信息;根据每个线程的第N+1次限速信息,采用独立令牌算法对CPU队列中对应的线程进行限速。其中第一次限速分配中,将总限速平均分配到各个线程中,各个线程执行对应的独立令牌算法,从各自对应的独占队列中取令牌,进而进行无锁限速;然而每个线程的处理性能并不相同,实际限速需求也并不相同,因此,单独一次分配并不能保证限速分配的合理、均衡。由此,进行第二次分配、第三次分配直至分配均衡。在后续各次限速分配中,应当结合之前各次分配的未适配次数、总限速信息、CPU队列中线程的个数进行重新限速分配,生成每个线程的新的限速信息。再经过一次次的限速分配调整后以达到各个线程限速均衡。按照线程个数及性能,对每个线程分配对应的限速,并基于分配的限速,利用各自独立的令牌算法对每个线程进行限速,每个线程可以从各自独立的独占队列中取令牌,从而避免使用共享队列,避免了锁等待的情况发生,以达到在基于轮询的高性能系统中实现无锁限速;通过在不断调整分配给各个线程的限速,以调整各个线程的限速,使得各个线程限速均衡,提高了基于轮询的无锁限速的效率。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种基于轮询的无锁并发模型的框图;
图2为本发明实施例提供的一种基于轮询的无锁限速方法的流程图;
图3为本发明实施例提供的另一种基于轮询的无锁限速方法的流程图;
图4为本发明实施例提供的又一种基于轮询的无锁限速方法的流程图;
图5为本发明实施例提供的一种基于轮询的无锁限速装置的框图;
图6为本发明实施例提供的一种基于轮询的无锁限速装置的示意图。
具体实施方式
下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
此外,下面所描述的本发明不同实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互结合。
实施例1
在现有的基于线程与锁的内存共享模型下,限速性能不仅受IO等待的影响,而且还受锁等待的影响。例如,通常情况下,线程和CPU一对一绑定,当多个线程争抢令牌桶内的令牌时,会导致锁等待,此时线程被挂载,对应CPU也相应宕机,进而影响数据的处理。为避免上述情况的发生,本申请利用基于轮询的无锁并发模型,在此模型中,线程和CPU一对一绑定,各个线程关联各自独立的队列,在数据处理过程中,从各自独立的队列中取令牌,进而实现各自队独立的限速。因此,在数据处理过程可以避免加锁,然而每个线程的实际的处理性能并不相同,为此本申请又通过各个线程进行限速分配,以达到各个线程间限速均衡。
本申请实施例提供一种基于轮询的无锁限速方法,图1是上述提及的基于轮询的无锁并发模型的一种框图,其中CPU队列中线程和CPU一对一绑定,各个线程和各自独立的独占队列一一对应。图2是根据基于轮询的无锁并发模型,通过获取总限速信息,依据所述总限速信息、CPU队列中线程的个数、在当前限速分配之前的每个线程的未适配总次数,进而生成每个线程的当前的限速信息,依据每个线程的当前限速信息,利用各自独立的令牌算法对对应的线程进行限速。通过不断地限速迭代,进而实现对各个线程限速均衡。虽然下文描述的过程包括以特定的顺序出现的多个操作,但是应该清楚地了解到,这些过程也可以包括更多或者更少的操作,这些操作可以顺序执行或者并行执行。
本实施例提供了一种基于轮询的无锁限速方法,用于设备工作过程中异常振动状态上传,参见图2所示,包括如下步骤:
步骤S101、获取当前CPU队列对应的总限速信息。
在上述实施方式中,具体地,所述总限速信息可以包括上传限速或者下载限速,此处对此并不受限制。例如,总限速信息对应的限速量可以为10G/10min、8.3M/1s等。
步骤S102、根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的未适配的次数,生成每个线程的第N+1次限速信息。
本实施例中,对每个线程的限速进行分配可以设定限速分配的频率,其中,按照设定的频率对各个线程进行限速分配,可以提高限速分配的效率,且便于对线程的实际限速需求、分配的限速需求进行监控,以确定各次的分配限速是否满足实际限速需求,得到每个线程每次的未适配次数,进而通过在最新次分配前的各线程的未适配总次数,结合所述总限速信息、CPU队列中线程的个数,生成最新一次的每个线程的限速信息,以便于后续通过该最新的限速信息对对应的线程进行限速。如下,列举几个具体实施例进行阐述:
在上述实施方式中,具体地,示例1,设定限速分配的频率为K次每秒,以K等于100为例,则对应每0.01秒进行一次限速分配。第0.00秒是进行第一次限速分配,可以在第一次限速分配之前,预先设定每个线程未适配的初始次数为1,根据CPU队列中线程的个数,求得每个线程关于总限速信息的平均限速,确定平均限速信息为每个线程第一次分配的限速信息。然而各个线程由于其自身的性能,其各自对应的实际限速需求并不相同,即使用平均限速对各个线程进行限速并不能使得各个线程的限速均衡,限速效率相对较低。为此,在第0.01秒时,进行第二次分配,第二次分配依据第一次分配给各个线程的限速,并结合第一次分配后,每个线程的限速适配情况,进而确定第二次分配中各个线程的限速信息;而第二次分配的限速并不能保证“一步到位”地使得各个线程达到均衡状态。为此,在第0.02秒时,进行第三次分配,和第二次分配同理,不过此时第三方分配时应当依据各个线程前两次未适配的总数,而非仅依据第二次未适配的次数、舍弃第一次未适配的次数。第四次、第五次直至第一百次的限速分配和第三次同理,此处不在赘述。应当说明的是,上述示例中的100次分配,仅是本申请例举的一个例子,本申请对限速分配的次数并不受限制,以达到均衡为目的,即就是在达到限速分配均衡后,下一次分配的限速和上一次分配的限速没有变化。限速分配的频率仅是相对性地减少限速分配达到均衡的时间,即就是限速分配的频率越快,达到限速分配均衡的耗时越短。
在上述实施方式中,具体的,根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的未适配的次数,生成每个线程的第N+1次限速信息。例如,可以通过前N次分配限速中每个线程的未适配的次数,计算得到每个线程第N+1次对应的限速占比;根据每个线程第N+1次对应的限速占比,结合总限速信息计算得到每个线程的第N+1次限速信息。例如,还可以通过前N次分配限速中每个线程的未适配的次数,结合CPU队列中线程的个数,计算得到平均未适配的次数,并求得每个线程的未适配的次数关于平均未适配的次数的占比;根据总限速信息、CPU队列中线程的个数计算得到每个线程的平均限速;根据平均限速、每个线程的未适配的次数关于平均未适配的次数的占比,计算得到每个线程的第N+1次限速信息。在此说明,上述例举的两种生成每个线程的第N+1次限速信息的方法,仅是较为基础的生成方式,并不以此作为限制;例如,还可以对前N次分配限速中每个线程的未适配的次数,添加函数关系或是比例系数后再进行求得关于平均未适配的占比,以此提高后续生成每个线程的第N+1次限速信息的精确性。
步骤S103、根据每个线程的第N+1次限速信息,采用独立令牌算法对CPU队列中对应的线程进行限速;
其中,N大于或等于1。
在上述实施方式中,具体地,根据每个线程的第N+1次限速信息,采用独立令牌算法对CPU队列中对应的线程进行限速,如下,列举几个具体实施例进行阐述。例如,根据每个线程的第N+1次限速信息,基于预先设定的单个令牌的数据量,根据线程i的第N+1次限速信息Di(N+1)确定单个令牌的生成频率;将单位时间内以所述生成频率生成的令牌放入线程i的独占队列,以对CPU队列中的线程i进行限速。例如,根据线程i的第N+1次限速信息Di(N+1),将限速信息Di(N+1)转换为关于单位时间1秒的限速信息、确定1秒内允许通过的数据量;将关于单位时间1秒的限速信息平均切割成若干等份,确定每等份内允许通过的数据量;以每等份内允许通过的数据量确定为单个令牌的数据量;每等份的时间为单个令牌的生成时间;将单位时间内以所述等份的时间频率生成的令牌放入线程i的独占队列,以对CPU队列中的线程i进行限速。对于每个线程,从对应的独占队列中取令牌,若能取到的令牌的数据量总值大于或等于处理需求对应的数据量,则线程允许数据处理;否则轮询该线程的独占队列,直至满足请求。
具体地,在第N次限速分配之后、第N+1次限速分配之前,CPU至少轮询线程i的独占队列一次。即就是,在N+1次限速分配时即停止对第N次限速分配的轮询,在第N+1次限速分配之后、第N+2次限速分配之前对第N+1次限速分配进行轮询。举例来说,若在第N次限速分配之后、第N+1次限速分配之前,第一次轮询线程i的独占队列,若第一次轮询能取到的令牌的数据量总值小于处理需求对应的数据量,则线程i未被允许数据处理;继续等待第二次轮询,若第二次轮询能取到的令牌的数据量总值小于处理需求对应的数据量,则继续等待第三次轮询,以此类推,直至轮询到取到的令牌的数据量总值大于或等于处理需求对应的数据量时,则线程i允许对对应的数据进行处理;若直到下一次限速分配时,轮询能取到的令牌的数据量总值小于处理需求对应的数据量,则确定当前限速对应的独立令牌算法,不满足数据处理需求,即就是线程i处理请求的实际速度超过线程i在第N次分配限速中分得的限速。在上述实施方式中,轮询得到令牌的最大数据量对应线程i在第N次分配限速中分得的限速,进而对线程i进行限速,避免了线程i从共享令牌桶中争抢令牌,从独占队列中取令牌不需要加锁,避免锁等待,提高了限速效率。
在本实施例中,进一步地,所述CPU轮询线程i的独占队列的时间间隔与限速分配的时间间隔保持同步;比如直接将轮询时间间隔与限速分配间隔设定为同一值,将轮询时间间隔与限速分配时间间隔设置成同一值可以最大程度优化CPU的使用性能。换句话说即就是轮询线程i的次数为一次,即在令牌的数据量达到对应的限速数据量时,轮询线程i的独占队列。例如,如果轮询频率大于限速分配频率时,就会出现在前后两次限速分配中,CPU至少轮询线程i两次的情形,而对于当线程i在第N次限速分配中未适配时,必须要在第N+1次限速分配中才会更新线程i所分得的限速,如此才有可能改变线程i未适配的情况,所以此时CPU对线程i的轮询结果是无用的,白白占用了CPU的使用空间。通过上述例子,从反面论证了轮询线程i的独占队列的时间间隔与限速分配的时间间隔保持同步,可以提高限速效率。
综上所述,本申请实施例,通过获取CPU队列对应的总限速信息;根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的未适配的次数,生成每个线程的第N+1次限速信息;根据每个线程的第N+1次限速信息,采用独立令牌算法对CPU队列中对应的线程进行限速。其中第一次限速分配中,将总限速平均分配到各个线程中,各个线程执行对应的独立令牌算法,从各自对应的独占队列中取令牌,进而进行无锁限速;然而每个线程的处理性能并不相同,实际限速需求也并不相同,因此,单独一次分配并不能保证限速分配的合理、均衡。由此,进行第二次分配、第三次分配直至分配均衡。在后续各次限速分配中,应当结合之前各次分配的未适配次数、总限速信息、CPU队列中线程的个数进行重新限速分配,生成每个线程的新的限速信息。再经过一次次的限速分配调整后以达到各个线程限速均衡。按照线程个数及性能,对每个线程分配对应的限速,并基于分配的限速,利用各自独立的令牌算法对每个线程进行限速,每个线程可以从各自独立的独占队列中取令牌,从而避免使用共享队列,避免了锁等待的情况发生,以达到在基于轮询的高性能系统中实现无锁限速;通过在不断调整分配给各个线程的限速,以调整各个线程的限速,使得各个线程限速均衡,提高了基于轮询的无锁限速的效率。
进一步地,所述根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的未适配的次数,生成每个线程的第N+1次限速信息,包括:
采用预设数学模型,根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的限速未适配的次数,生成每个线程的第N+1次限速信息;
所述预设数学模型为:
Di(N+1)=S/A*(Ci(N)/AVGC)
其中,Di(N+1)表示线程i于第N+1次限速分配中分得的限速,S表示总限速,A表示CPU队列中线程的个数,Ci(N)表示前N次分配限速中线程i未适配的次数,AVGC表示前N次分配限速中每个线程未适配的平均次数。
在上述实施方式中,具体的,以线程i为例,通过前N次分配限速中每个线程的未适配的次数C1(N)、C2(N)、C3(N)…,结合CPU队列中线程的个数A,计算得到前N次分配限速中每个线程未适配的平均次数AVGC,并求得线程i的未适配的次数Ci(N)关于未适配的平均次数AVGC的比例(Ci(N)/AVGC);根据总限速信息S、CPU队列中线程的个数A计算得到每个线程的平均限速S/A;根据平均限速S/A、线程i的未适配的次数Ci(N)关于未适配的平均次数AVGC的比例(Ci(N)/AVGC),计算得到线程i于第N+1次限速分配中分得的限速,等于S/A*(Ci(N)/AVGC)。
进一步地,如图3所示,步骤S103、所述根据每个线程的第N+1次限速信息,采用独立令牌算法对CPU队列中对应的线程进行限速,包括:
步骤S1031、基于预先设定的单个令牌的数据量,根据线程i的第N+1次限速信息Di(N+1)确定单个令牌的生成频率;
步骤S1032、将单位时间内以所述生成频率生成的令牌放入线程i的独占队列,以对CPU队列中的线程i进行限速。
进一步地,如图4所示,所述方法还包括:
步骤S104、确定每个线程的第1次限速信息。
具体地,所述确定每个线程的第1次限速信息,包括:
根据第一次限速分配前总限速信息、CPU队列中线程的个数计算得到每个线程的平均限速,将所述平均限速确定为每个线程的第1次限速;
确定第一次限速分配的数学公式为:Di=S1/A;
其中,Di为第一次限速分配后每个线程i(1≤i≤A)分配的限速,S1为第一次限速分配前的总限速信息,A为CPU队列中线程的个数。
进一步地,如图4所示,所述方法还包括:
步骤S105、确定N次限速分配中每个线程是否适配。
具体地,所述确定N次限速分配中每个线程是否适配,包括:
在第一次限速分配之前,预先设定每个线程未适配的初始次数为1;
在第m次限速分配中,若线程i处理请求的实际速度超过线程i在第m次分配限速中分得的限速,则线程i在第m次限速分配中未适配;其中,m=1,……N。
进一步地,如图4所示,所述方法还包括:
步骤S106、计算前N次分配限速中每个线程的未适配的次数;
其中,在第p次限速分配中,若线程i的实际限速大于分得的限速信息Di(p),则确定第p次适配中线程i未适配,线程i对应的未适配的次数加1,否则加0,其中1≤p≤N;
累计相加计算得到线程i前N次分配限速中未适配次数,并作为第N+1次限速分配时的Ci(N)。
进一步地,所述方法还包括:在第N次限速分配之后、第N+1次限速分配之前,CPU至少轮询线程i的独占队列一次。
进一步地,所述CPU轮询线程i的独占队列的时间间隔与限速分配的时间间隔保持同步。
综上所述,在上述实施例中,通过预设数学模型对每个线程分配对应的限速,并基于分配的限速,利用各自独立的令牌算法对每个线程进行限速,每个线程可以从各自独立的独占队列中取令牌,从而避免使用共享队列,避免了锁等待的情况发生,以达到在基于轮询的高性能系统中实现无锁限速。通过预设数学模型以不断调整分配给各个线程的各次限速,并以分配的限速对各个线程进行限速,使得各个线程限速均衡,提高了基于轮询的无锁限速的效率。通过基于预先设定的单个令牌的数据量,根据每个线程的第N+1次限速信息确定每个单个令牌的生成频率;并将单位时间内以各个线程对应的生成频率生成的令牌放入各自的独占队列,每个线程可以从各自独立的独占队列中取令牌,以对各个线程进行限速。
实施例2
图5是本发明实施例提供的一种基于轮询的无锁限速装置的框图,本实施例以该装置应用于图2所示的基于轮询的无锁限速方法进行说明。该装置用于对CPU队列中的线程限速,该装置至少包括以下几个模块:
获取模块51,用于当前获取CPU队列对应的总限速信息;
生成模块52,用于根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的未适配的次数,生成每个线程的第N+1次限速信息;
限速模块53,用于根据每个线程的第N+1次限速信息,采用独立令牌算法对CPU队列中对应的线程进行限速;
其中,N大于或等于1。
本申请实施例提供的基于轮询的无锁限速装置,可用于如上实施例1中执行的基于轮询的无所限速方法,相关细节参考上述方法实施例,其实现原理和技术效果类似,在此不再赘述。
需要说明的是:上述实施例中提供的基于轮询的无锁限速装置在进行基于轮询的无锁限速时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将基于轮询的无锁限速装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的基于轮询的无锁限速装置与基于轮询的无锁限速方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
实施例3
本发明实施例提供的一种基于轮询的无锁限速装置,用于基于轮询的无锁限速,如图6所示,该电子设备包括处理器601和存储器602,其中处理器601和存储器602可以通过总线或者其他方式连接,图6中以通过总线连接为例。
处理器601可以为中央处理器(Central Processing Unit,CPU)也可以为其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、图形处理器(GraphicsProcessing Unit,GPU)、嵌入式神经网络处理器(Neural-network Processing Unit,NPU)或者其他专用的深度学习协处理器、专用集成电路(Application Specific IntegratedCircuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
存储器602作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中基于轮询的无锁限速方法对应的程序指令/模块。处理器601通过运行存储在存储器602中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施例1中的基于轮询的无锁限速方法。
存储器602可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器601所创建的数据等。此外,存储器602可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器602可选包括相对于处理器601远程设置的存储器,这些远程存储器可以通过网络连接至处理器601。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述一个或者多个模块存储在所述存储器602中,当被所述处理器601执行时,执行如图2所示基于轮询的无锁限速方法。
本发明实施例还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例中的基于轮询的无锁限速方法。其中,所述非暂态计算机可读存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(Random Access Memory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,缩写:HDD)或固态硬盘(Solid-StateDrive,SSD)等;所述非暂态计算机可读存储介质还可以包括上述种类的存储器的组合。
本领域内的技术人员应明白,本发明的实施例可提供为方法、装置或非暂态计算机可读存储介质均可涉及或包含计算机程序产品。
因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
显然,以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本发明创造的保护范围之中。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (8)
1.一种基于轮询的无锁限速方法,用于对CPU队列中的线程限速,其特征在于,所述方法包括:
获取当前CPU队列对应的总限速信息;
根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的未适配的次数,生成每个线程的第N+1次限速信息;
根据每个线程的第N+1次限速信息,采用独立令牌算法对CPU队列中对应的线程进行限速;
其中,N大于或等于1;
所述根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的未适配的次数,生成每个线程的第N+1次限速信息,包括:
采用预设数学模型,根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的限速未适配的次数,生成每个线程的第N+1次限速信息;
所述预设数学模型为:
Di(N+1) =S/A*( Ci(N)/AVGC)
其中,Di(N+1)表示线程i于第N+1次限速分配中分得的限速,S表示总限速,A表示CPU队列中线程的个数,Ci(N)表示前N次分配限速中线程i未适配的次数,AVGC表示前N次分配限速中每个线程未适配的平均次数;
所述方法还包括:
确定N次限速分配中每个线程是否适配;
所述确定N次限速分配中每个线程是否适配,包括:
在第一次限速分配之前,预先设定每个线程未适配的初始次数为1;
在第m次限速分配中,若线程i处理请求的实际速度超过线程i在第m次分配限速中分得的限速,则线程i在第m次限速分配中未适配;其中,m=1,…… N。
2.根据权利要求1所述的基于轮询的无锁限速方法,其特征在于,所述根据每个线程的第N+1次限速信息,采用独立令牌算法对CPU队列中对应的线程进行限速,包括:
基于预先设定的单个令牌的数据量,根据线程i的第N+1次限速信息Di(N+1)确定单个令牌的生成频率;
将单位时间内以所述生成频率生成的令牌放入线程i的独占队列,以对CPU队列中的线程i进行限速。
3.根据权利要求2所述的基于轮询的无锁限速方法,其特征在于,所述方法还包括:
确定每个线程的第一次限速信息;
所述确定每个线程的第一次限速信息,包括:
根据第一次限速分配前总限速信息、CPU队列中线程的个数计算得到每个线程的平均限速,将所述平均限速确定为每个线程的第一次限速;
确定第一次限速分配的数学公式为:Di =S1/A;
其中,Di为第一次限速分配后每个线程i(1≤i≤A)分配的限速,S1为第一次限速分配前的总限速信息。
4.根据权利要求3所述的基于轮询的无锁限速方法,其特征在于,所述方法还包括:
计算前N次限速分配中每个线程的未适配的次数;
其中,在第p次限速分配中,若第p次适配中线程i未适配,线程i对应的未适配的次数加1,否则加0,其中1≤p≤N;
累计相加计算得到线程i前N次分配限速中未适配次数,并作为第N+1次限速分配时的Ci(N)。
5.根据权利要求4所述的基于轮询的无锁限速方法,其特征在于,所述方法还包括:
在第N次限速分配之后、第N+1次限速分配之前,CPU至少轮询线程i的独占队列一次。
6.根据权利要求5所述的基于轮询的无锁限速方法,其特征在于:所述CPU轮询线程i的独占队列的时间间隔与限速分配的时间间隔保持同步。
7.一种基于轮询的无锁限速装置,其特征在于,包括:
获取模块,用于获取当前CPU队列对应的总限速信息;
生成模块,用于根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的未适配的次数,生成每个线程的第N+1次限速信息;确定N次限速分配中每个线程是否适配;所述确定N次限速分配中每个线程是否适配,包括:在第一次限速分配之前,预先设定每个线程未适配的初始次数为1;在第m次限速分配中,若线程i处理请求的实际速度超过线程i在第m次分配限速中分得的限速,则线程i在第m次限速分配中未适配;其中,m=1,……N;
限速模块,用于根据每个线程的第N+1次限速信息,采用独立令牌算法对CPU队列中对应的线程进行限速;
其中,N大于或等于1;
采用预设数学模型,根据所述总限速信息、CPU队列中线程的个数、前N次分配限速中每个线程的限速未适配的次数,生成每个线程的第N+1次限速信息;
所述预设数学模型为:
Di(N+1) =S/A*( Ci(N)/AVGC)
其中,Di(N+1)表示线程i于第N+1次限速分配中分得的限速,S表示总限速,A表示CPU队列中线程的个数,Ci(N)表示前N次分配限速中线程i未适配的次数,AVGC表示前N次分配限速中每个线程未适配的平均次数。
8.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储有计算机指令,所述计算机指令被处理器执行时实现如权利要求1-6中任一项所述的基于轮询的无锁限速方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111422684.0A CN114064293B (zh) | 2021-11-26 | 2021-11-26 | 一种基于轮询的无锁限速方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111422684.0A CN114064293B (zh) | 2021-11-26 | 2021-11-26 | 一种基于轮询的无锁限速方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114064293A CN114064293A (zh) | 2022-02-18 |
CN114064293B true CN114064293B (zh) | 2022-10-04 |
Family
ID=80276741
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111422684.0A Active CN114064293B (zh) | 2021-11-26 | 2021-11-26 | 一种基于轮询的无锁限速方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114064293B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110214436A (zh) * | 2017-01-25 | 2019-09-06 | 华为技术有限公司 | 一种多核无锁速率限制装置和方法 |
CN110753131A (zh) * | 2019-11-04 | 2020-02-04 | 网易(杭州)网络有限公司 | 微服务分布式限流方法及装置、存储介质和电子设备 |
CN112214269A (zh) * | 2020-10-19 | 2021-01-12 | 天翼电子商务有限公司 | 基于zookeeper的滑动窗口限流解决方案 |
CN112231107A (zh) * | 2020-10-28 | 2021-01-15 | 新华三信息安全技术有限公司 | 防火墙的报文限速系统、方法、设备及介质 |
CN112714075A (zh) * | 2020-12-30 | 2021-04-27 | 深圳市吉祥腾达科技有限公司 | 一种桥转发数据包限速的方法 |
CN112799861A (zh) * | 2021-01-29 | 2021-05-14 | 上海弘积信息科技有限公司 | 一种多核架构下流量限速无锁并发实现的方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7813277B2 (en) * | 2007-06-29 | 2010-10-12 | Packeteer, Inc. | Lockless bandwidth management for multiprocessor networking devices |
KR101075724B1 (ko) * | 2007-07-06 | 2011-10-21 | 삼성전자주식회사 | 통신 시스템에서 패킷 전송 속도 제한 장치 및 방법 |
US8122166B2 (en) * | 2009-04-20 | 2012-02-21 | International Business Machines Corporation | Management of redundant physical data paths in a computing system |
CN106357554A (zh) * | 2015-07-13 | 2017-01-25 | 中兴通讯股份有限公司 | 一种设备内部处理器网口收包方法及装置 |
-
2021
- 2021-11-26 CN CN202111422684.0A patent/CN114064293B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110214436A (zh) * | 2017-01-25 | 2019-09-06 | 华为技术有限公司 | 一种多核无锁速率限制装置和方法 |
CN110753131A (zh) * | 2019-11-04 | 2020-02-04 | 网易(杭州)网络有限公司 | 微服务分布式限流方法及装置、存储介质和电子设备 |
CN112214269A (zh) * | 2020-10-19 | 2021-01-12 | 天翼电子商务有限公司 | 基于zookeeper的滑动窗口限流解决方案 |
CN112231107A (zh) * | 2020-10-28 | 2021-01-15 | 新华三信息安全技术有限公司 | 防火墙的报文限速系统、方法、设备及介质 |
CN112714075A (zh) * | 2020-12-30 | 2021-04-27 | 深圳市吉祥腾达科技有限公司 | 一种桥转发数据包限速的方法 |
CN112799861A (zh) * | 2021-01-29 | 2021-05-14 | 上海弘积信息科技有限公司 | 一种多核架构下流量限速无锁并发实现的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114064293A (zh) | 2022-02-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11977784B2 (en) | Dynamic resources allocation method and system for guaranteeing tail latency SLO of latency-sensitive application | |
CN108667748B (zh) | 一种控制带宽的方法、装置、设备和存储介质 | |
CN107045456B (zh) | 一种资源分配方法及资源管理器 | |
CN107579926B (zh) | 基于令牌桶算法的Ceph云存储系统的QoS设置方法 | |
Su et al. | An elastic mixed-criticality task model and its scheduling algorithm | |
US20130212594A1 (en) | Method of optimizing performance of hierarchical multi-core processor and multi-core processor system for performing the method | |
EP3553657A1 (en) | Method and device for allocating distributed system task | |
US20150295970A1 (en) | Method and device for augmenting and releasing capacity of computing resources in real-time stream computing system | |
US20180101414A1 (en) | Processor thread management | |
Su et al. | Scheduling algorithms for elastic mixed-criticality tasks in multicore systems | |
US20110161978A1 (en) | Job allocation method and apparatus for a multi-core system | |
CN111258745B (zh) | 一种任务处理方法及设备 | |
Xie et al. | Pandas: robust locality-aware scheduling with stochastic delay optimality | |
US20160004567A1 (en) | Scheduling applications in a clustered computer system | |
US20120297216A1 (en) | Dynamically selecting active polling or timed waits | |
CN107864391B (zh) | 视频流缓存分发方法及装置 | |
WO2018076238A1 (zh) | 异构系统、计算任务分配方法及装置 | |
US10733022B2 (en) | Method of managing dedicated processing resources, server system and computer program product | |
CN112162861A (zh) | 线程分配方法、装置、计算机设备及存储介质 | |
US20190138354A1 (en) | Method for scheduling jobs with idle resources | |
KR20240052091A (ko) | 그래픽 처리 유닛 자원 관리 방법, 장치, 디바이스, 저장 매체, 및 프로그램 제품 | |
CN116684420A (zh) | 集群资源调度方法、装置、集群系统和可读存储介质 | |
CN110178119B (zh) | 处理业务请求的方法、装置与存储系统 | |
CN114064293B (zh) | 一种基于轮询的无锁限速方法、装置及存储介质 | |
CN109412865A (zh) | 一种虚拟网络资源分配方法、系统及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |