【技术实现步骤摘要】
一种无锁数据汇聚方法及装置
本专利技术涉及计算机应用
,具体涉及数据存储
,尤其涉及无锁数据汇聚方法及装置。
技术介绍
数据汇聚技术是将多份数据或信息进行处理,组合出更有效、更符合用户需求的数据的过程,在进行数据汇聚时,应用程序在实时从网络中接收数据后,必须对接收的数据进行缓存,其它应用程序从缓存中取出数据,对所取出的数据进行汇聚。目前,将数据存入缓存、从缓存取出数据是“原子”操作,即一方在进行操作时,另一方不对缓存进行操作,传统情况下,由于数据流量很小,一般采取对缓存“加锁”的方式来保证操作的原子性。但是当数据流量上升到10Mpbs以上时,加锁方式处理数据的速度已经远远不能满足应用的要求。
技术实现思路
有鉴于此,本专利技术实施例提供一种无锁数据汇聚方法及装置,来解决以上
技术介绍
部分提到的技术问题。本专利技术实施例采用以下技术方案:第一方面,本专利技术实施例提供了一种无锁数据汇聚方法,包括:在缓存中开辟至少一个缓存内存数组,所述缓存内存数组的属性包括取指针、存指针和用于标识所述存指针是否在所述取指针前面的缓存标志;创建至少一个用于将从客户端提取的数据包保存到缓存内存数组存线程和至少一个用于从缓存内存数组中取出数据包的取线程,以使所开辟的各缓存内存数组均有一个对应的存线程和一个对应的取线程;使所开辟的各缓存内存数组所对应的存线程和取线程根据所对应的缓存内存数组的属性进行线程运行或线程等待,以并行从至少一个客户端提取数据包并进行汇聚。第二方面,本专利技术实施例还提供了一种无锁数据汇聚装置,包括:缓存内存数组创建单元,用于在缓存中开辟至少一个缓存内存数 ...
【技术保护点】
一种无锁数据汇聚方法,其特征在于,包括:在缓存中开辟至少一个缓存内存数组,所述缓存内存数组的属性包括取指针、存指针和用于标识所述存指针是否在所述取指针前面的缓存标志;创建至少一个用于将从客户端提取的数据包保存到缓存内存数组存线程和至少一个用于从缓存内存数组中取出数据包的取线程,以使所开辟的各缓存内存数组均有一个对应的存线程和一个对应的取线程;使所开辟的各缓存内存数组所对应的存线程和取线程根据所对应的缓存内存数组的属性进行线程运行或线程等待,以并行从至少一个客户端提取数据包并进行汇聚。
【技术特征摘要】
1.一种无锁数据汇聚方法,其特征在于,包括:在缓存中开辟至少一个缓存内存数组,所述缓存内存数组的属性包括取指针、存指针和用于标识所述存指针是否在所述取指针前面的缓存标志;创建至少一个用于将从客户端提取的数据包保存到缓存内存数组存线程和至少一个用于从缓存内存数组中取出数据包的取线程,以使所开辟的各缓存内存数组均有一个对应的存线程和一个对应的取线程;分别为各取线程在缓存中开辟至少一个对应的缓存地址队列,所开辟的各缓存地址队列用于存储至少一个所开辟的缓存内存数组中所保存的数据包的地址对象,其中所述地址对象包括用于标识数据包所在的缓存内存数组的缓存内存数组标识;使所开辟的各缓存内存数组所对应的存线程和取线程根据所对应的缓存内存数组的属性进行线程运行或线程等待,以并行从至少一个客户端提取数据包并进行汇聚,其中,使缓存内存数组所对应的存线程用于:接收至少一个客户端中发送的数据包,根据所对应的缓存内存数组的属性将所接收的数据包向所对应的缓存内存数组进行存储,将所存储的数据包的地址信息形成地址对象存储到所对应的缓存内存数组所对应的取线程所对应的缓存地址队列中;使缓存内存数组所对应的取线程用于:从所对应的缓存地址队列中提取地址对象,获取所提取的地址对象中的缓存内存数组标识所对应的缓存内存数组的属性,根据所获取的属性和所提取的地址对象提取数据包,其中,所述根据所对应的缓存内存数组的属性将所接收的数据包向所对应的缓存内存数组进行存储的步骤包括:获取所接收的数据包的大小,获取所对应的缓存内存数组的取指针、存指针和缓存标志;若所述缓存标志为真且所述取指针与所述存指针不相等,则判断所述存指针到所述取指针之间的空间是否小于所接收的数据包的大小,若是则使所述存线程等待,否则对所接收的数据包进行存储;若所述缓存标志为真且所述取指针与所述存指针相等,则使所述存线程等待;若所述缓存标志为假,且所述存指针与所述缓存内存数组的末地址之间的空间小于所接收的数据包的大小,则判断所对应的缓存内存数组的剩余空间是否小于待存储数据包的大小,若是则使所述存线程等待,否则将所述缓存标志更改为真,对所接收的数据包进行存储;若所述缓存标志为假,且所述存指针与所述缓存内存数组的末地址之间的空间不小于所述待存储数据包的大小,则对所接收的数据包进行存储;其中所述对所接收的数据包进行存储的步骤包括:根据所述存指针将所接收的数据包存储到所对应的缓存内存数组中并更改所述存指针,将所接收的数据包在所对应的缓存内存数组中的地址对象记录在所对应的缓存内存数组所指定的缓存地址队列中。2.如权利要求1所述的无锁数据汇聚方法,其特征在于,所述根据所对应的缓存内存数组的属性将所接收的数据包向所对应的缓存内存数组进行存储的步骤包括:获取所接收的数据包的大小,获取所对应的缓存内存数组的取指针、存指针和缓存标志;若所述缓存标志为真且所述取指针与所述存指针不相等,则判断所述存指针到所述取指针之间的空间是否小于所接收的数据包的大小,若是则使所述存线程等待,否则对所接收的数据包进行存储;若所述缓存标志为真且所述取指针与所述存指针相等,则使所述存线程等待;若所述缓存标志为假,且所述存指针与所述缓存内存数组的末地址之间的空间小于所接收的数据包的大小,则判断所述缓存内存数组的起始地址到所述取指针之间的空间是否小于所述待存储数据包的大小,若是则使所述存线程等待,否则将所述缓存标志更改为真,对所接收的数据包进行存储;若所述缓存标志为假,且所述存指针与所述缓存内存数组的末地址之间的空间不小于所述待存储数据包的大小,则对所接收的数据包进行存储;其中所述对所接收的数据包进行存储的步骤包括:根据所述存指针将所接收的数据包存储到所对应的缓存内存数组中并更改所述存指针,将所接收的数据包在所对应的缓存内存数组中的地址对象记录在所对应的缓存内存数组所指定的缓存地址队列中。3.如权利要求1所述的无锁数据汇聚方法,其特征在于,根据所获取的属性和所提取的地址对象提取数据包的步骤具体包括:根据所提取的地址对象向所述地址对象中的缓存内存数组标识对应的缓存内存数组中提取数据包;根据所述地址对象更改所述地址对象中的缓存内存数组标识对应的缓存内存数组的属性中的取指针;判断所述地址对象更改所述地址对象中的缓存内存数组标识对应的缓存内存数组的属性中的取指针与更改前相比是否变小,若是则将所述地址对象更改所述地址对象中的缓存内存数组标识对应的缓存内存数组的属性中的缓存标志设置为否。4.如权利要求1所述的无锁数据汇聚方法,其特征在于,所述地址对象还包括所存储的数据包在缓存中的起始地址和数据长度。5.如权利要求1所述的无锁数据汇聚方法,其特征在于,所述地址对象还包括所存储的数据包在所对应的缓存内存数组中的起始地址的相对地址和数据长度。6.一种无锁数据汇聚装置,其特征在于,包括:缓存内存数组创建单元,用于在缓存中开辟至少一个缓存内存数组,所述缓存内存数组的属性包括取指针、存指针和用于标识所述存指针是否在所述取指...
【专利技术属性】
技术研发人员:李成金,郑驰,
申请(专利权)人:北京华胜天成科技股份有限公司,北京华胜天成软件技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。