[发明专利]构造数据队列的方法、装置及从其插入和消费对象的方法有效
申请号: | 201410132403.1 | 申请日: | 2014-04-02 |
公开(公告)号: | CN104978321B | 公开(公告)日: | 2018-12-04 |
发明(设计)人: | 罗实;封仲淹;陈昱 | 申请(专利权)人: | 阿里巴巴集团控股有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30;G06F8/30 |
代理公司: | 北京清源汇知识产权代理事务所(特殊普通合伙) 11644 | 代理人: | 冯德魁 |
地址: | 英属开曼群岛大开*** | 国省代码: | 开曼群岛;KY |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 构造 数据 队列 方法 装置 插入 消费 对象 | ||
1.一种构造数据队列的方法,其特征在于,包括:
设置环形数组,所述环形数组具有规定数个用于存储规定格式的数据的存储单元,称为槽位,首尾槽位衔接,形成环形,所述规定数用size表示;向该环形数组中存储数据对象称为插入对象,从该环形数组中拉取数据对象并清空相应的槽位称为消费对象;所述插入和消费均沿环形数组规定方向顺序操作,所述规定方向称为操作方向;所述size为2的指数倍;
为环形数组设置生产者计数器和消费者计数器,所述生产者计数器对向环形数组插入对象进行计数;所述消费者计数器对从环形数组消费对象进行计数;所述生产者计数器和消费者计数器为初始值为零的递增变量。
2.根据权利要求1所述的构造数据队列的方法,其特征在于,所述生产者计数器和消费者计数器为递增变量具体是,所述生产者计数器和消费者计数器均为64字节填充的长整形严格递增变量。
3.根据权利要求1-2任一项所述的构造数据队列的方法,其特征在于,对环形数组中的槽位赋予从0开始沿操作方向递增的槽位值。
4.一种向数据队列中插入对象的方法,其特征在于,所述数据队列为根据上述权利要求1-3任一项所述的构造数据队列的方法构造的数据队列;该向数据队列中插入对象的方法包括:
获取数据队列中生产者计数器的值;
原子递增生产者计数器的值,作为生产者计数器的当前值;
获取数据队列中消费者计数器的当前值;
根据生产者计数器的当前值与消费者计数器的当前值判断是否可以插入对象;若判断结果为是,则进入下一步;
向数据队列中指定槽位插入对象;
将生产者计数器的当前值作为最新的生产者计数器的值发布。
5.根据权利要求4所述的向数据队列中插入对象的方法,其特征在于,所述原子递增生产者计数器的值,作为生产者计数器的当前值的步骤采用下述方法:
若生产者为一个,将生产者计数器的值原子递增1,作为生产者计数器的当前值;
若生产者为至少两个,则对生产者计数器的值以CAS原子操作的方式进行所述原子递增,操作结果作为生产者计数器的当前值。
6.根据权利要求4所述的向数据队列中插入对象的方法,其特征在于,所述根据生产者计数器的当前值与消费者计数器的当前值判断是否可以插入对象,包括:
作生产者计数器的当前值减去消费者计数器的当前值的差运算;
判断运算结果是否等于size值,若是,则是否可以插入对象的判断结果为否,并进入判断是否等待步骤;若否,则所述是否可以插入对象的判结果为是;
判断是否等待步骤的判断结果如果为是,则继续作前述差运算;判断结果如果为否,则结束插入对象的操作。
7.根据权利要求4所述的向数据队列中插入对象的方法,其特征在于,当所述数据队列为根据权利要求1的构造数据队列的方法构造的数据队列时,向数据队列中指定槽位插入对象的步骤中,以下述方式确定所述指定槽位:
以生产者计数器当前值的二进制形式与size-1的值的二进制形式进行按位与运算,计算的结果赋予插入槽位值Slotput,该插入槽位值Slotput即为所述指定槽位。
8.一种从数据队列中消费对象的方法,其特征在于,所述数据队列为根据上述权利要求1-3任一项所述的构造数据队列的方法构造的数据队列;该从数据队列中消费对象的方法包括:
获取生产者计数器及消费者计数器的值;
根据上述计数器的值,判断是否可以消费对象;若是,则进入下一步;
将消费者计数器的值原子递增,作为消费者计数器的当前值;
根据消费者计数器的当前值,确定消费对象相对应的槽位值;
从相对应的槽位值的槽位中消费对象。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于阿里巴巴集团控股有限公司,未经阿里巴巴集团控股有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410132403.1/1.html,转载请声明来源钻瓜专利网。
- 数据显示系统、数据中继设备、数据中继方法、数据系统、接收设备和数据读取方法
- 数据记录方法、数据记录装置、数据记录媒体、数据重播方法和数据重播装置
- 数据发送方法、数据发送系统、数据发送装置以及数据结构
- 数据显示系统、数据中继设备、数据中继方法及数据系统
- 数据嵌入装置、数据嵌入方法、数据提取装置及数据提取方法
- 数据管理装置、数据编辑装置、数据阅览装置、数据管理方法、数据编辑方法以及数据阅览方法
- 数据发送和数据接收设备、数据发送和数据接收方法
- 数据发送装置、数据接收装置、数据收发系统、数据发送方法、数据接收方法和数据收发方法
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置