CN106385377B - 一种信息处理方法和系统 - Google Patents
一种信息处理方法和系统 Download PDFInfo
- Publication number
- CN106385377B CN106385377B CN201510454232.9A CN201510454232A CN106385377B CN 106385377 B CN106385377 B CN 106385377B CN 201510454232 A CN201510454232 A CN 201510454232A CN 106385377 B CN106385377 B CN 106385377B
- Authority
- CN
- China
- Prior art keywords
- token
- tokens
- shared memory
- token bucket
- bucket shared
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/215—Flow control; Congestion control using token-bucket
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例公开了一种信息处理方法及系统。所述方法包括:令牌桶产生令牌,控制所述令牌存储至令牌桶共享内存;检测到至少一个进程同时请求令牌,且确定所述令牌桶共享内存中的令牌数量大于零时,通过比较和交换(CAS)原子操作技术控制所述至少一个进程更新所述令牌桶共享内存中的令牌数量;当第一进程更新所述令牌桶共享内存中的令牌数量成功时,控制所述第一进程获得第一令牌,以使所述第一进程基于所述第一令牌进行数据传输;其中,所述第一进程为所述至少一个进程中的任一进程。
Description
技术领域
本发明涉及信息处理技术,具体涉及一种信息处理方法和系统。
背景技术
令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法,它能有效平滑的控制单位时间内对接口的最大访问量。令牌桶算法的主要原理是系统会以一个恒定的速率往令牌桶里面放入令牌,若令牌桶里的令牌数量达到了令牌桶的容量限制则将溢出的令牌丢弃,而如果有数据传输则消耗令牌;当令牌桶里没有令牌可取的时候,系统拒绝该服务,说明当前的速率以达到最高阈值,数据传输被拒绝。
目前这种传统的令牌桶算法一方面仅能够控制单机单进程的访问速率,而无法控制单机多进程的访问速率;另一方面如果以共享内存方式多进程共享令牌,还会面临令牌加锁导致的效率和控制性能低下,以及访问冲突的问题。
发明内容
为解决现有存在的技术问题,本发明实施例提供一种信息处理方法和系统,能够控制单机多进程的访问速率,并且能够避免访问冲突以及令牌加锁导致的效率和控制性能低下的问题。
为达到上述目的,本发明实施例的技术方案是这样实现的:
本发明实施例提供了一种信息处理方法,所述方法包括:
令牌桶产生令牌,控制所述令牌存储至令牌桶共享内存;
检测到至少一个进程同时请求令牌,且确定所述令牌桶共享内存中的令牌数量大于零时,通过比较和交换(CAS,Compare And Swap)原子操作技术控制所述至少一个进程更新所述令牌桶共享内存中的令牌数量;
当第一进程更新所述令牌桶共享内存中的令牌数量成功时,控制所述第一进程获得第一令牌,以使所述第一进程基于所述第一令牌进行数据传输;
其中,所述第一进程为所述至少一个进程中的任一进程。
上述方案中,当请求令牌的进程数量为至少两个时,所述方法还包括:
当第二进程更新所述令牌桶共享内存中的令牌数量失败时,向所述第二进程返回第一响应消息;所述第一响应消息表征所述令牌桶共享内存中无令牌被分配。
上述方案中,所述方法还包括:当第二进程更新所述令牌桶共享内存中的令牌数量失败的次数达到预设阈值时,向所述第二进程返回失败响应消息。
上述方案中,所述方法还包括:控制所述第二进程按预设规则重新向所述令牌桶共享内存请求令牌。
上述方案中,所述令牌桶产生令牌,控制所述令牌存储至令牌桶共享内存,包括:所述令牌桶按预设生成速率和预设生成周期生成令牌,将生成的令牌存储至令牌桶共享内存。
上述方案中,所述将生成的令牌存储至令牌桶共享内存,包括:
基于CAS原子操作技术控制生成的令牌存储在所述令牌桶共享内存并更新令牌数量;
其中,当生成一个令牌存储在所述令牌桶共享内存中时,控制所述令牌桶共享内存中的令牌总量加一。
本发明实施例还提供了一种信息处理系统,所述系统包括:令牌生产单元、令牌桶共享内存和令牌消费单元;其中,
所述令牌生产单元,用于产生令牌,控制所述令牌存储至令牌桶共享内存;
所述令牌桶共享内存,用于存储令牌,以及令牌数量;
所述令牌消费单元,用于检测到至少一个进程同时请求令牌,向所述共享内存发送所述至少一个进程的令牌请求;基于所述至少一个进程的令牌请求获得所述令牌桶共享内存中的令牌数量;确定所述令牌桶共享内存中的令牌数量大于零时,通过CAS原子操作技术控制所述至少一个进程更新所述令牌桶共享内存中的令牌数量;当第一进程更新所述令牌桶共享内存中的令牌数量成功时,控制所述第一进程获得第一令牌,以使所述第一进程基于所述第一令牌进行数据传输;其中,所述第一进程为所述至少一个进程中的任一进程。
上述方案中,当请求令牌的进程数量为至少两个时,所述令牌消费单元,还用于当第二进程更新所述令牌桶共享内存中的令牌数量失败时,向所述第二进程返回第一响应消息;所述第一响应消息表征所述令牌桶共享内存中无令牌被分配。
上述方案中,所述令牌消费单元,还用于当第二进程更新所述令牌桶共享内存中的令牌数量失败的次数达到预设阈值时,向所述第二进程返回失败响应消息。
上述方案中,所述令牌消费单元,还用于控制所述第二进程按预设规则重新向所述令牌桶共享内存请求令牌。
上述方案中,所述令牌生产单元,用于按预设生成速率和预设生成周期生成令牌,将生成的令牌存储至令牌桶共享内存。
上述方案中,所述令牌生产单元,还用于基于CAS原子操作技术控制生成的令牌存储在所述令牌桶共享内存并更新令牌数量;
其中,当生成一个令牌存储在所述令牌桶共享内存中时,控制所述令牌桶共享内存中的令牌总量加一。
本发明实施例的信息处理方法和系统,通过令牌桶产生令牌,控制所述令牌存储至令牌桶共享内存;检测到至少一个进程同时请求令牌,且确定所述令牌桶共享内存中的令牌数量大于零时,通过CAS原子操作技术控制所述至少一个进程更新所述令牌桶共享内存中的令牌数量;当第一进程更新所述令牌桶共享内存中的令牌数量成功时,控制所述第一进程获得第一令牌,以使所述第一进程基于所述第一令牌进行数据传输;其中,所述第一进程为所述至少一个进程中的任一进程。如此,采用本发明实施例的技术方案,通过令牌桶共享内存共享令牌,以及CAS原子操作技术更新令牌桶共享内存中的令牌数量,从而有效的解决了令牌加锁导致的效率和控制性能低下,以及访问冲突的问题,实现了令牌桶共享内存中的无锁情况下的数据并发和更改,实现了单机多进程的访问速率的控制。
附图说明
图1为本发明实施例一的信息处理方法的流程示意图;
图2为本发明实施例的信息处理方法的应用示意图;
图3为本发明实施例二的信息处理系统的组成结构示意图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步详细的说明。
分析现有的令牌桶算法,主要包括三个变量:令牌桶的容量capacity,令牌生成的速率rate,以及当前桶里面的令牌数量tokens。作为其中一种实施方式,所述令牌桶算法的代码示例如下:
基于上述示例,发明人发现目前的令牌桶算法只能控制单进程的访问速率,而无法控制多进程的访问速率。基于此,发明人提出了本发明实施例中的基于令牌桶共享内存的方式多进程共享令牌,并且采用CAS原子操作技术更新令牌桶共享内存中的令牌数量,从而有效的解决了令牌加锁导致的效率和控制性能低下,以及访问冲突的问题,实现了令牌桶共享内存中的无锁情况下的数据并发和更改。
实施例一
本发明实施例提供了一种信息处理方法。图1为本发明实施例一的信息处理方法的流程示意图;如图1所示,所述方法包括:
步骤101:令牌桶产生令牌,控制所述令牌存储至令牌桶共享内存。
这里,所述令牌桶产生令牌,控制所述令牌存储至令牌桶共享内存,包括:所述令牌桶按预设生成速率和预设生成周期生成令牌,将生成的令牌存储至令牌桶共享内存。
本实施例中,所述令牌桶中预先配置生成速率rate和生成周期period;则令牌桶每个周期生成的令牌数量N=rate×period;将生成的令牌存储至令牌桶共享内存;其中,所述令牌桶每生成一个令牌时,将所述令牌存储至所述令牌桶共享内存;或者,所述令牌桶在每个生成周期时间到时,将所述生成周期生成的令牌存储至所述令牌桶共享内存中。
进一步地,所述将生成的令牌存储至令牌桶共享内存,包括:
基于CAS原子操作技术控制生成的令牌存储在所述令牌桶共享内存并更新令牌数量;其中,当生成一个令牌存储在所述令牌桶共享内存中时,控制所述令牌桶共享内存中的令牌总量加一。
本实施例中,所述原子操作表明当前一个步骤或至少两个步骤是不可分割的,顺序也不可打乱,在执行过程中,其他的操作也不可介入,直至所述当前一个步骤或至少两个步骤执行完成。基于此,所述令牌桶生成令牌后,将所述令牌存储至所述令牌桶共享内存,并更新所述令牌桶共享内存的令牌数量。作为一种实施方式,所述基于CAS原子操作技术控制生成的令牌存储在所述令牌桶共享内存并更新令牌数量的代码示例如下,在本示例中,tokens表明当前令牌桶里的令牌数量,也即所述令牌桶共享内存中的令牌数量:
具体的,预先配置令牌桶的容量,所述令牌桶的容量即当前系统允许的最大数据突发流量。当所述令牌桶新生成的令牌以及剩余的令牌的数量总和大于所述令牌桶的容量时,则丢弃多余的令牌。
步骤102:检测到至少一个进程同时请求令牌,且确定所述令牌桶共享内存中的令牌数量大于零时,通过CAS原子操作技术控制所述至少一个进程更新所述令牌桶共享内存中的令牌数量。
具体的,本步骤包括:步骤1、请求令牌。检测到至少一个进程同时请求令牌时,向所述令牌桶共享内存请求令牌,获得所述令牌桶共享内存中的令牌数量;判断所述令牌数量是否为零;当判断的结果为是时,返回失败消息;当判断的结果为否时,执行步骤2。
步骤2、更新令牌数。确定所述令牌桶共享内存中的令牌数量不为零时,通过CAS原子操作技术更新所述令牌桶共享内存中的令牌数量,即控制所述令牌桶共享内存中的令牌数量减一;在更新成功时,返回成功消息;当更新失败时,返回第一响应消息;所述第一响应消息表征所述令牌桶共享内存中无令牌被分配,按预设规则重新执行步骤1和步骤2,直至成功更新所述令牌桶共享内存中的令牌数量,也即表明获取到令牌;或者依旧返回第一响应消息;进一步地,在返回第一响应消息的次数达到预设阈值时,返回失败响应消息;所述失败响应消息表明访问冲突严重,即同时存在多个进程请求令牌,可以理解为,当前所述令牌桶共享内存中无令牌可取,即系统当前不可以进行数据传输。其中,所述按预设规则重新执行步骤1和步骤2可以包括:在预设时间段后再重新执行步骤1和步骤2;或者在返回所述第一响应消息后,立即重新执行步骤1和步骤2。
具体的,在接收到至少一个进程同时请求令牌时,首先判断所述令牌桶共享内存中的令牌数量是否大于零;当判定所述令牌桶共享内存中的令牌数量大于零时,表明所述令牌桶共享内存中还有可以被分配的令牌,也即系统当前的速率还未达到最大值,还能够允许数据传输;基于此,所述至少一个进程同时通过CAS原子操作技术更新所述令牌桶共享内存中的令牌数量。具体的,所述通过CAS原子操作技术更新所述令牌桶共享内存中的令牌数量,包括:所述至少一个进程在修改所述令牌桶共享内存中的令牌数量时,判断所述令牌桶共享内存中的令牌数量的赋值是否被修改过,也即检测所述令牌桶共享内存中的令牌数量的赋值是否是初始的老值;当判断的结果为是时,则确定所述令牌桶共享内存中的令牌数量的赋值被修改过,说明所述令牌桶共享内存中的令牌数量的赋值被更改过,也即表明已有进程抢先更新了所述令牌桶共享内存中的令牌数量,获得了令牌;当判断的结果为否时,则确定所述令牌桶共享内存中的令牌数量的赋值未被修改过,说明所述令牌桶共享内存中的令牌数量的赋值是初始的老值,说明所述令牌桶共享内存中的令牌数量的赋值未被更改过,也即表明未有进程抢先更新了所述令牌桶共享内存中的令牌数量,当前进程能够获得令牌。
作为一种实施方式,所述通过CAS原子操作技术控制所述至少一个进程更新所述令牌桶共享内存中的令牌数量的代码示例如下,在本示例中,tokens表明当前令牌桶里的令牌数量,也即所述令牌桶共享内存中的令牌数量:
其中,作为一种实施方式,以GNU编译器套件(GNU Compiler Collection)为例,所述以CAS方式进行更新可通过调用以下函数实现:
1、bool__sync_bool_compare_and_swap(type*ptr,type oldval typenewval,...);或者,
2、type__sync_val_compare_and_swap(type*ptr,type oldval typenewval,...)。
当然,本实施例中所述的通过CAS原子操作技术控制所述至少一个进程更新所述令牌桶共享内存中的令牌数量可采用现有技术中的大部分编程语言分别提供的CAS无锁接口实现,本实施例中不做详细描述。
本实施例中,步骤101和步骤102的顺序不分先后,即令牌桶在生成令牌存储至令牌桶共享内存的同时,进程可以请求令牌;或者所述令牌桶共享内存存储有令牌的前提下,也可以是进程先请求令牌。本实施例中对步骤101和步骤102的顺序不做限定。
步骤103:当第一进程更新所述令牌桶共享内存中的令牌数量成功时,控制所述第一进程获得第一令牌,以使所述第一进程基于所述第一令牌进行数据传输;其中,所述第一进程为所述至少一个进程中的任一进程;所述第一令牌为所述令牌桶共享内存中存储的任一令牌。
这里,当第一进程更新所述令牌桶共享内存中的令牌数量成功时,也即接收到成功消息时,获得第一令牌;获取到所述第一令牌后,也即为所述第一进程分配了传输速率,按所述传输速率控制所述第一进程进行数据传输。
作为另一实施方式,当请求令牌的进程数量为至少两个时,所述方法还包括:当第二进程更新所述令牌桶共享内存中的令牌数量失败时,向所述第二进程返回第一响应消息;所述第一响应消息表征所述令牌桶共享内存中无令牌被分配。
本实施例针对有至少两个进程同时请求令牌的场景进行说明。当有至少两个进程同时请求令牌时,假设为第一进程和第二进程;当所述令牌桶共享内存中的令牌数量大于零时,表明还有令牌未被分配,也即当前系统还允许数据传输。假设所述第一进程和所述第二进程同时更新所述令牌桶共享内存中的令牌1,假定上述第一进程更新所述令牌桶共享内存中的令牌数量成功,则第二进程更新所述令牌桶共享内存中的令牌数量失败,返回第一响应消息,所述第一响应消息表征所述令牌桶共享内存中无令牌被分配。
进一步地,所述方法还包括:控制所述第二进程按预设规则重新向所述令牌桶共享内存请求令牌。
这里,所述按预设规则重新向所述令牌桶共享内存请求令牌可以包括:在预设时间段后再重新向所述令牌桶共享内存请求令牌;或者在返回所述第一响应消息后,立即重新向所述令牌桶共享内存请求令牌。其中,所述重新向所述令牌桶共享内存请求令牌的过程与本实施例一中步骤101至步骤103相同,这里不再赘述。
或者,作为另一实施方式,所述方法还包括:当第二进程更新所述令牌桶共享内存中的令牌数量失败的次数达到预设阈值时,向所述第二进程返回失败响应消息。
这里,当第二进程更新所述令牌桶共享内存中的令牌数量失败的次数达到预设阈值时,向所述第二进程返回失败响应消息;所述失败响应消息表明访问冲突严重,即同时存在多个进程请求令牌,可以理解为,当前所述令牌桶共享内存中无令牌可取,即系统当前不可以进行数据传输。
采用本发明实施例的技术方案,通过令牌桶共享内存共享令牌,以及CAS原子操作技术更新令牌桶共享内存中的令牌数量,从而有效的解决了令牌加锁导致的效率和控制性能低下,以及访问冲突的问题,实现了令牌桶共享内存中的无锁情况下的数据并发和更改,实现了单机多进程的访问速率的控制。
图2为本发明实施例的信息处理方法的应用示意图;如图2所示,以当前有进程1、进程2和进程3三个进程请求令牌为例,对本实施例进行详细说明。
步骤21:令牌桶按预设速率和预设周期生成令牌,将生成的令牌存储至令牌桶共享内存。
步骤22:进程1、进程2和进程3同时向令牌桶共享内存请求令牌,获得所述令牌桶共享内存当前的令牌数量。本实施例中,假设所述令牌桶共享内存当前的令牌数量小于进程数量,假设所述令牌桶共享内存当前的令牌数量等于1。
本实施例中,步骤21和步骤22的顺序不分先后,即令牌桶在生成令牌存储至令牌桶共享内存的同时,进程可以请求令牌;或者所述令牌桶共享内存存储有令牌的前提下,也可以是进程先请求令牌。本实施例中对步骤21和步骤22的顺序不做限定。
步骤23:进程1、进程2和进程3同时通过CAS原子操作技术控制所述至少一个进程更新所述令牌桶共享内存中的令牌数量。
具体的,本步骤中,虽然进程1、进程2和进程3同时对所述令牌桶共享内存中的令牌数量进行更新,但请发起更新依然有微小的时间先后顺序。假设本实施例中,所述进程1先完成对所述令牌桶共享内存中的令牌数量进行更新,则控制所述令牌桶共享内存中的令牌数量变为0;相应的,也表明所述进程1获得所述令牌桶共享内存中剩余的最后一个令牌。则此时,由于所述令牌桶共享内存中的令牌数量已被所述进程1更新了,但是所述进程2和所述进程3并不知情,则进程2和进程3依旧对所述令牌桶共享内存中的令牌数量进行更新。以所述进程2为例,在对所述令牌桶共享内存中的令牌数量进行更新时,首先判断所述令牌数量是否被修改过,也即检测所述令牌桶共享内存中的令牌数量的赋值是否是初始的老值;在本实施例中,所述令牌数量以被修改为0,则说明所述令牌桶共享内存中的令牌数量的赋值被更改过,也即表明已有进程抢先更新了所述令牌桶共享内存中的令牌数量,获得了令牌,则所述进程2返回第一响应消息;所述第一响应消息表征所述令牌桶共享内存中无令牌被分配。同理,所述进程3依旧返回第一响应消息。这种方式解决了令牌加锁导致的效率和控制性能低下,以及访问冲突的问题,实现了令牌桶共享内存中的无锁情况下的数据并发和更改,实现了单机多进程的访问速率的控制。
实施例二
本发明实施例还提供了一种信息处理系统。图3为本发明实施例二的信息处理系统的组成结构示意图,如图3所示,所述系统包括:令牌生产单元31、令牌桶共享内存32和令牌消费单元33;其中,
所述令牌生产单元31,用于产生令牌,控制所述令牌存储至令牌桶共享内存32;
所述令牌桶共享内存32,用于存储令牌,以及令牌数量;
所述令牌消费单元33,用于检测到至少一个进程同时请求令牌,向所述共享内存发送所述至少一个进程的令牌请求;基于所述至少一个进程的令牌请求获得所述令牌桶共享内存32中的令牌数量;确定所述令牌桶共享内存32中的令牌数量大于零时,通过CAS原子操作技术控制所述至少一个进程更新所述令牌桶共享内存32中的令牌数量;当第一进程更新所述令牌桶共享内存32中的令牌数量成功时,控制所述第一进程获得第一令牌,以使所述第一进程基于所述第一令牌进行数据传输;其中,所述第一进程为所述至少一个进程中的任一进程。
这里,所述令牌生产单元31,用于按预设生成速率和预设生成周期生成令牌,将生成的令牌存储至令牌桶共享内存32。
具体的,所述令牌生产单元31,还用于基于CAS原子操作技术控制生成的令牌存储在所述令牌桶共享内存32并更新令牌数量;其中,当生成一个令牌存储在所述令牌桶共享内存32中时,控制所述令牌桶共享内存32中的令牌总量加一。
本实施例中,所述令牌生产单元31中预先配置生成速率rate和生成周期period;则所述令牌生产单元31每个周期生成的令牌数量N=rate×period;将生成的令牌存储至令牌桶共享内存32;其中,所述令牌生产单元31每生成一个令牌时,将所述令牌存储至所述令牌桶共享内存32;或者,所述令牌生产单元31在每个生成周期时间到时,将所述生成周期生成的令牌存储至所述令牌桶共享内存32中。
进一步地,所述令牌生产单元31将生成的令牌存储至令牌桶共享内存32,包括:
基于CAS原子操作技术控制生成的令牌存储在所述令牌桶共享内存32并更新令牌数量;其中,当生成一个令牌存储在所述令牌桶共享内存32中时,控制所述令牌桶共享内存32中的令牌总量加一。
本实施例中,所述原子操作表明当前一个步骤或至少两个步骤是不可分割的,顺序也不可打乱,在执行过程中,其他的操作也不可介入,直至所述当前一个步骤或至少两个步骤执行完成。基于此,所述令牌生产单元31生成令牌后,将所述令牌存储至所述令牌桶共享内存32,并更新所述令牌桶共享内存32的令牌数量。作为一种实施方式,所述基于CAS原子操作技术控制生成的令牌存储在所述令牌桶共享内存32并更新令牌数量的代码示例参见实施例一中步骤101中所示的代码示例所示,本实施例中不再赘述。
具体的,所述令牌生产单元31预先配置令牌桶的容量,所述令牌桶的容量即表明当前系统允许的最大数据突发流量。当所述令牌生产单元31新生成的令牌以及剩余的令牌的数量总和大于所述令牌桶的容量时,则丢弃多余的令牌。
本实施例中,所述令牌消费单元33检测到至少一个进程同时请求令牌,向所述共享内存发送所述至少一个进程的令牌请求;基于所述至少一个进程的令牌请求获得所述令牌桶共享内存32中的令牌数量;确定所述令牌桶共享内存32中的令牌数量大于零时,通过CAS原子操作技术控制所述至少一个进程更新所述令牌桶共享内存32中的令牌数量,包括以下两个步骤:步骤1、请求令牌。所述令牌消费单元33检测到至少一个进程同时请求令牌时,向所述令牌桶共享内存32请求令牌,获得所述令牌桶共享内存32中的令牌数量;判断所述令牌数量是否为零;当判断的结果为是时,返回失败消息;当判断的结果为否时,执行步骤2。
步骤2、更新令牌数。所述令牌消费单元33确定所述令牌桶共享内存32中的令牌数量不为零时,通过CAS原子操作技术更新所述令牌桶共享内存32中的令牌数量,即控制所述令牌桶共享内存32中的令牌数量减一;在更新成功时,返回成功消息;当更新失败时,返回第一响应消息;所述第一响应消息表征所述令牌桶共享内存32中无令牌被分配,按预设规则重新执行步骤1和步骤2,直至成功更新所述令牌桶共享内存32中的令牌数量,也即表明获取到令牌;或者依旧返回第一响应消息;进一步地,在返回第一响应消息的次数达到预设阈值时,返回失败响应消息;所述失败响应消息表明访问冲突严重,即同时存在多个进程请求令牌,可以理解为,当前所述令牌桶共享内存中无令牌可取,即系统当前不可以进行数据传输。其中,所述按预设规则重新执行步骤1和步骤2可以包括:在预设时间段后再重新执行步骤1和步骤2;或者在返回所述第一响应消息后,立即重新执行步骤1和步骤2。
具体的,在所述令牌消费单元33接收到至少一个进程同时请求令牌时,首先判断所述令牌桶共享内存32中的令牌数量是否大于零;当判定所述令牌桶共享内存32中的令牌数量大于零时,表明所述令牌桶共享内存32中还有可以被分配的令牌,也即系统当前的速率还未达到最大值,还能够允许数据传输;基于此,所述令牌消费单元33控制所述至少一个进程同时通过CAS原子操作技术更新所述令牌桶共享内存32中的令牌数量。具体的,所述通过CAS原子操作技术更新所述令牌桶共享内存32中的令牌数量,包括:所述至少一个进程在修改所述令牌桶共享内存32中的令牌数量时,判断所述令牌桶共享内存32中的令牌数量的赋值是否被修改过,也即检测所述令牌桶共享内存32中的令牌数量的赋值是否是初始的老值;当判断的结果为是时,则确定所述令牌桶共享内存32中的令牌数量的赋值被修改过,说明所述令牌桶共享内存32中的令牌数量的赋值被更改过,也即表明已有进程抢先更新了所述令牌桶共享内存32中的令牌数量,获得了令牌;当判断的结果为否时,则确定所述令牌桶共享内存32中的令牌数量的赋值未被修改过,说明所述令牌桶共享内存32中的令牌数量的赋值是初始的老值,说明所述令牌桶共享内存32中的令牌数量的赋值未被更改过,也即表明未有进程抢先更新了所述令牌桶共享内存32中的令牌数量,当前进程能够获得令牌。
作为一种实施方式,所述令牌消费单元33通过CAS原子操作技术控制所述至少一个进程更新所述令牌桶共享内存32中的令牌数量的代码示例见实施例一中步骤102中所示的代码示例所示,本实施例中不再赘述。
当然,本实施例中所述的通过CAS原子操作技术控制所述至少一个进程更新所述令牌桶共享内存32中的令牌数量可采用现有技术中的大部分编程语言分别提供的CAS无锁接口实现,本实施例中不做详细描述。
作为另一实施方式,当请求令牌的进程数量为至少两个时,所述令牌消费单元33,还用于当第二进程更新所述令牌桶共享内存32中的令牌数量失败时,向所述第二进程返回第一响应消息;所述第一响应消息表征所述令牌桶共享内存32中无令牌被分配。
进一步地,所述令牌消费单元33,还用于控制所述第二进程按预设规则重新向所述令牌桶共享内存32请求令牌。
或者,作为另一实施方式,所述令牌消费单元33,还用于当第二进程更新所述令牌桶共享内存32中的令牌数量失败的次数达到预设阈值时,向所述第二进程返回失败响应消息。
本实施例针对有至少两个进程同时请求令牌的场景进行说明。当有至少两个进程同时请求令牌时,假设为第一进程和第二进程;当所述令牌桶共享内存32中的令牌数量大于零时,表明还有令牌未被分配,也即当前系统还允许数据传输。假设所述第一进程和所述第二进程同时更新所述令牌桶共享内存32中的令牌1,假定上述第一进程更新所述令牌桶共享内存32中的令牌数量成功,则所述令牌消费单元33控制第二进程更新所述令牌桶共享内存32中的令牌数量失败,返回第一响应消息,所述第一响应消息表征所述令牌桶共享内存32中无令牌被分配。当第二进程更新所述令牌桶共享内存32中的令牌数量失败的次数达到预设阈值时,向所述第二进程返回失败响应消息;所述失败响应消息表明访问冲突严重,即同时存在多个进程请求令牌,可以理解为,当前所述令牌桶共享内存中无令牌可取,即系统当前不可以进行数据传输。
本领域技术人员应当理解,本发明实施例的信息处理系统中各处理单元的功能,可参照前述信息处理方法的相关描述而理解,本发明实施例的信息处理系统中各处理单元,可通过实现本发明实施例所述的功能的模拟电路而实现,也可以通过执行本发明实施例所述的功能的软件在智能终端上的运行而实现。
在本实施例中,所述信息处理系统,在实际应用中,可通过服务器或服务器集群、工作站、计算机等电子设备实现。所述信息处理系统中的令牌生产单元31和令牌消费单元33,在实际应用中,可由所述信息处理系统中的中央处理器(CPU,Central ProcessingUnit)、数字信号处理器(DSP,Digital Signal Processor)或可编程门阵列(FPGA,Field-Programmable Gate Array)实现;所述信息处理系统中的令牌桶共享内存32在实际应用中,可由所述信息处理系统中的共享内存实现。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (13)
1.一种信息处理方法,其特征在于,所述方法包括:
令牌桶产生令牌,控制所述令牌存储至令牌桶共享内存;
当多个进程同时请求令牌时,向所述令牌桶共享内存发送所述多个进程的令牌请求;基于所述多个进程的令牌请求获得所述令牌桶共享内存中的令牌数量;
当确定所述令牌桶共享内存中的令牌数量大于零时,通过比较和交换CAS原子操作技术控制所述多个进程更新所述令牌桶共享内存中的令牌数量;
当确定所述令牌桶共享内存中的令牌数量的赋值未被修改时,控制第一进程成功更新所述令牌桶共享内存中的令牌数量,并控制所述第一进程获得第一令牌,以使所述第一进程基于所述第一令牌进行数据传输;
其中,所述第一进程为所述多个进程中的任一进程。
2.根据权利要求1所述的方法,其特征在于,当请求令牌的进程数量为至少两个时,所述方法还包括:
当第二进程更新所述令牌桶共享内存中的令牌数量失败时,向所述第二进程返回第一响应消息;所述第一响应消息表征所述令牌桶共享内存中无令牌被分配。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:当第二进程更新所述令牌桶共享内存中的令牌数量失败的次数达到预设阈值时,向所述第二进程返回失败响应消息。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:控制所述第二进程按预设规则重新向所述令牌桶共享内存请求令牌。
5.根据权利要求1所述的方法,其特征在于,所述令牌桶产生令牌,控制所述令牌存储至令牌桶共享内存,包括:所述令牌桶按预设生成速率和预设生成周期生成令牌,将生成的令牌存储至令牌桶共享内存。
6.根据权利要求5所述的方法,其特征在于,所述将生成的令牌存储至令牌桶共享内存,包括:
基于CAS原子操作技术控制生成的令牌存储在所述令牌桶共享内存并更新令牌数量;
其中,当生成一个令牌存储在所述令牌桶共享内存中时,控制所述令牌桶共享内存中的令牌总量加一。
7.一种信息处理系统,其特征在于,所述系统包括:令牌生产单元、令牌桶共享内存和令牌消费单元;其中,
所述令牌生产单元,用于产生令牌,控制所述令牌存储至令牌桶共享内存;
所述令牌桶共享内存,用于存储令牌,以及令牌数量;
所述令牌消费单元,用于当多个进程同时请求令牌时,向所述令牌桶共享内存发送所述多个进程的令牌请求;基于所述多个进程的令牌请求获得所述令牌桶共享内存中的令牌数量;当确定所述令牌桶共享内存中的令牌数量大于零时,通过CAS原子操作技术控制所述多个进程更新所述令牌桶共享内存中的令牌数量;当确定所述令牌桶共享内存中的令牌数量的赋值未被修改时,控制第一进程成功更新所述令牌桶共享内存中的令牌数量,并控制所述第一进程获得第一令牌,以使所述第一进程基于所述第一令牌进行数据传输;其中,所述第一进程为所述多个进程中的任一进程。
8.根据权利要求7所述的系统,其特征在于,当请求令牌的进程数量为至少两个时,所述令牌消费单元,还用于当第二进程更新所述令牌桶共享内存中的令牌数量失败时,向所述第二进程返回第一响应消息;所述第一响应消息表征所述令牌桶共享内存中无令牌被分配。
9.根据权利要求8所述的系统,其特征在于,所述令牌消费单元,还用于当第二进程更新所述令牌桶共享内存中的令牌数量失败的次数达到预设阈值时,向所述第二进程返回失败响应消息。
10.根据权利要求8所述的系统,其特征在于,所述令牌消费单元,还用于控制所述第二进程按预设规则重新向所述令牌桶共享内存请求令牌。
11.根据权利要求7所述的系统,其特征在于,所述令牌生产单元,用于按预设生成速率和预设生成周期生成令牌,将生成的令牌存储至令牌桶共享内存。
12.根据权利要求11所述的系统,其特征在于,所述令牌生产单元,还用于基于CAS原子操作技术控制生成的令牌存储在所述令牌桶共享内存并更新令牌数量;
其中,当生成一个令牌存储在所述令牌桶共享内存中时,控制所述令牌桶共享内存中的令牌总量加一。
13.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的信息处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510454232.9A CN106385377B (zh) | 2015-07-29 | 2015-07-29 | 一种信息处理方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510454232.9A CN106385377B (zh) | 2015-07-29 | 2015-07-29 | 一种信息处理方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106385377A CN106385377A (zh) | 2017-02-08 |
CN106385377B true CN106385377B (zh) | 2020-06-16 |
Family
ID=57916158
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510454232.9A Active CN106385377B (zh) | 2015-07-29 | 2015-07-29 | 一种信息处理方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106385377B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108399078B (zh) * | 2018-03-19 | 2021-06-15 | 武汉斗鱼网络科技有限公司 | 一种消息频率限制方法、系统、服务器和存储介质 |
CN108833296A (zh) * | 2018-04-08 | 2018-11-16 | 阿里巴巴集团控股有限公司 | 批处理速率的控制方法和装置 |
CN108768873B (zh) * | 2018-05-29 | 2021-09-28 | 腾讯科技(深圳)有限公司 | 一种流量控制方法及相关设备 |
CN109739652A (zh) * | 2018-12-27 | 2019-05-10 | 北京字节跳动网络技术有限公司 | 基于Go语言的实时长连接方法及装置 |
CN110932994B (zh) * | 2019-12-31 | 2022-11-22 | 深圳云天励飞技术有限公司 | 一种数据流量处理方法、装置、电子设备及存储介质 |
CN115378656A (zh) * | 2022-07-26 | 2022-11-22 | 青岛海尔科技有限公司 | 令牌回填方法、存储介质及电子装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1774699A (zh) * | 2003-04-24 | 2006-05-17 | 国际商业机器公司 | 共享资源的并发访问 |
-
2015
- 2015-07-29 CN CN201510454232.9A patent/CN106385377B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1774699A (zh) * | 2003-04-24 | 2006-05-17 | 国际商业机器公司 | 共享资源的并发访问 |
Also Published As
Publication number | Publication date |
---|---|
CN106385377A (zh) | 2017-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106385377B (zh) | 一种信息处理方法和系统 | |
CN106375404B (zh) | 数据存储控制方法、数据存储方法、数据获取方法及装置 | |
CN102147746B (zh) | 动态线程池管理系统及管理方法 | |
TW201837733A (zh) | 一種區塊鏈共識方法、設備及系統 | |
US11489735B2 (en) | Dynamic network allocation apparatus, dynamic network allocation method and non-transitory computer-readable medium | |
CN108924187B (zh) | 基于机器学习的任务处理方法、装置和终端设备 | |
US10268506B2 (en) | Method and system for master less node communication | |
CN105589658B (zh) | 资源处理方法、系统及服务器、仓库管理方法及装置 | |
CN105791254B (zh) | 网络请求处理方法、装置及终端 | |
EP2998862A1 (en) | Method, device, and system for memory management | |
WO2017185285A1 (zh) | 图形处理器任务的分配方法和装置 | |
CN104518987A (zh) | 并行多线程报文处理的方法和装置 | |
WO2022062833A1 (zh) | 内存分配方法及相关设备 | |
CN111857992B (zh) | 一种Radosgw模块中线程资源分配方法和装置 | |
CN115964319A (zh) | 远程直接内存访问的数据处理方法及相关产品 | |
CN113794764A (zh) | 服务器集群的请求处理方法、介质和电子设备 | |
CN113361913A (zh) | 一种通信业务编排方法、装置、计算机设备及存储介质 | |
CN114185558A (zh) | 基于K8s的原生应用选主方法、装置及存储介质 | |
CN115426361A (zh) | 分布式客户端打包方法、装置、主服务器及存储介质 | |
US20170193006A1 (en) | Distributed file system and method of creating files effectively | |
CN117407159A (zh) | 内存空间的管理方法及装置、设备、存储介质 | |
WO2024001411A1 (zh) | 多线程调度方法及装置 | |
CN108810645B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN107689979B (zh) | 一种下载请求处理方法和处理设备 | |
CN114398410A (zh) | 一种连续编号生成方法、装置、服务器集群及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |