一种无锁数据汇聚方法及装置制造方法及图纸

技术编号:9535350 阅读:74 留言:0更新日期:2014-01-03 18:40
本发明专利技术公开了一种无锁数据汇聚方法及装置,方法包括:在缓存中开辟至少一个缓存内存数组,所述缓存内存数组的属性包括取指针、存指针和用于标识所述存指针是否在所述取指针前面的缓存标志;创建至少一个用于将从客户端提取的数据包保存到缓存内存数组存线程和至少一个用于从缓存内存数组中取出数据包的取线程,以使所开辟的各缓存内存数组均有一个对应的存线程和一个对应的取线程;使所开辟的各缓存内存数组所对应的存线程和取线程根据所对应的缓存内存数组的属性进行线程运行或线程等待,以并行从至少一个客户端提取数据包并进行汇聚。本发明专利技术实施例能实现多个线程并发地通过缓存进行数据汇聚,能提高数据汇聚的效率。

【技术实现步骤摘要】
一种无锁数据汇聚方法及装置
本专利技术涉及计算机应用
,具体涉及数据存储
,尤其涉及无锁数据汇聚方法及装置。
技术介绍
数据汇聚技术是将多份数据或信息进行处理,组合出更有效、更符合用户需求的数据的过程,在进行数据汇聚时,应用程序在实时从网络中接收数据后,必须对接收的数据进行缓存,其它应用程序从缓存中取出数据,对所取出的数据进行汇聚。目前,将数据存入缓存、从缓存取出数据是“原子”操作,即一方在进行操作时,另一方不对缓存进行操作,传统情况下,由于数据流量很小,一般采取对缓存“加锁”的方式来保证操作的原子性。但是当数据流量上升到10Mpbs以上时,加锁方式处理数据的速度已经远远不能满足应用的要求。
技术实现思路
有鉴于此,本专利技术实施例提供一种无锁数据汇聚方法及装置,来解决以上
技术介绍
部分提到的技术问题。本专利技术实施例采用以下技术方案:第一方面,本专利技术实施例提供了一种无锁数据汇聚方法,包括:在缓存中开辟至少一个缓存内存数组,所述缓存内存数组的属性包括取指针、存指针和用于标识所述存指针是否在所述取指针前面的缓存标志;创建至少一个用于将从客户端提取的数据包保存到缓存内存数组存线程和至少一个用于从缓存内存数组中取出数据包的取线程,以使所开辟的各缓存内存数组均有一个对应的存线程和一个对应的取线程;使所开辟的各缓存内存数组所对应的存线程和取线程根据所对应的缓存内存数组的属性进行线程运行或线程等待,以并行从至少一个客户端提取数据包并进行汇聚。第二方面,本专利技术实施例还提供了一种无锁数据汇聚装置,包括:缓存内存数组创建单元,用于在缓存中开辟至少一个缓存内存数组,所述缓存内存数组的属性包括取指针、存指针和用于标识所述存指针是否在所述取指针前面的缓存标志;线程创建单元,用于创建至少一个用于将从客户端提取的数据包保存到缓存内存数组存线程和至少一个用于从缓存内存数组中取出数据包的取线程,以使所开辟的各缓存内存数组均有一个对应的存线程和一个对应的取线程;线程运行单元,用于使所开辟的各缓存内存数组所对应的存线程和取线程根据所对应的缓存内存数组的属性进行线程运行或线程等待,以并行从至少一个客户端提取数据包并进行汇聚。本专利技术实施例提出的技术主案的有益技术效果是:本专利技术实施例通过在缓存中开辟至少一个缓存内存数组,创建至少一个用于将从客户端提取的数据包保存到缓存内存数组存线程和至少一个用于从缓存内存数组中取出数据包的取线程,以使所开辟的各缓存内存数组均有一个对应的存线程和一个对应的取线程,使所开辟的各缓存内存数组所对应的存线程和取线程根据所对应的缓存内存数组的属性进行线程运行或线程等待,以并行从至少一个客户端提取数据包并进行汇聚。本专利技术实施例避免了对缓存“加锁”而限制数据包的提取效率,能实现多个线程并发地从通过缓存进行数据汇聚,能提高数据汇聚的效率。附图说明为了更清楚地说明本专利技术实施例中的技术方案,下面将对本专利技术实施例描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据本专利技术实施例的内容和这些附图获得其他的附图。图1是本专利技术具体实施例一所述的无锁数据汇聚方法流程图;图2是本专利技术具体实施例一所述的无锁数据汇聚示意图;图3是本专利技术具体实施例二所述的存线程的方法流程图;图4是本专利技术具体实施例二所述的取线程的方法流程图;图5是本专利技术具体实施例二所述的无锁数据汇聚示意图;图6是本专利技术具体实施例三所述的无锁数据汇聚装置的结构框图;图7是本专利技术具体实施例四所述的无锁数据汇聚装置的结构框图。具体实施方式为使本专利技术解决的技术问题、采用的技术方案和达到的技术效果更加清楚,下面将结合附图对本专利技术实施例的技术方案作进一步的详细描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。下面结合附图并通过具体实施方式来进一步说明本专利技术的技术方案。实施例一图1是本实施例所述的无锁数据汇聚方法流程图,如图1所示,本实施例所述的无锁数据汇聚方法包括:S101、在缓存中开辟至少一个缓存内存数组。服务器在缓存中开辟至少一个缓存内存数组,所创建的缓存内存数组的属性包括取指针、存指针和用于标识所述存指针是否在所述取指针前面的缓存标志。为了使缓存内存数组所对应的存线程和取线程能共享该缓存内存数组的属性,保证该缓存内存数组的存线程和取线程在操作所对应的缓存内存数组的取指针、存指针和缓存标志时的一致性,可将各缓存内存数组的取指针、存指针和缓存标志可设置为volatile类型的变量存储在服务器的寄存器中。S102、创建至少一个用于将从客户端提取的数据包保存到缓存内存数组存线程和至少一个用于从缓存内存数组中取出数据包的取线程。服务器创建至少一个用于将从客户端提取的数据包保存到缓存内存数组存线程和至少一个用于从缓存内存数组中取出数据包的取线程,以使所开辟的各缓存内存数组均满足:有且仅有一个对应的存线程,有且仅有一个对应的取线程。存线程用于向所对应的缓存内存数组中存储数据包,根据所对应的缓存数组的属性和待存储的数据包的大小,决定是否进行线程等待,存储完成后,修改所对应的缓存内存数组的属性。取线程用于从所对应的缓存内存数组中提取数据包,提取完成后,修改所对应的缓存内存数组的属性。S103、使所开辟的各缓存内存数组所对应的存线程和取线程根据所对应的缓存内存数组的属性进行线程运行或线程等待,以并行从至少一个客户端提取数据包并进行汇聚。服务器在步S102创建完线程之后,可运行所创建的所有线程,以使得各缓存内存数组所对应的存线程和取线程进行数据的存储和提取。例如,如图2所示,服务器端创建了缓存内存数组1、缓存内存数组2、缓存内存数组3和缓存内存数组M等,分别为缓存内存数组1、缓存内存数组2、缓存内存数组3和缓存内存数组M创建了对应的存线程1、存线程2、存线程3、存线程M,为缓存内存数组1、缓存内存数组2创建了对应的取线程1,为缓存内存数组3和缓存内存数组M创建了对应的取线程2。存线程1、存线程2、存线程3、存线程M、取线程1和取线程2并行运行,将从客户端1、客户端2、客户端3和客户端M提取的数据包汇聚起来。例如,存线程1从客户端1提取数据包,根据所提取的数据包的大小和缓存内存数组1的属性判断进行线程等待还是进行数据包存储,若进行数据包存储,存储完成之后,对缓存内存数组1的属性进行修改。取线程1用于从缓存内存数组1提到数据包,每提取一个数据包,就对缓存内存数组1的属性进行一次修改。本实施例所述的技术方案,排除了现有技术中的对缓存加锁的方式,提出了一种无锁数据汇聚方法,通过开辟缓存内存数组,创建存线程和取线程,以使所开辟的各缓存内存数组均有一个对应的存线程和一个对应的取线程,使各缓存内存数组所对应的存线程和取线程能并发地向缓存内存数组中存取数据,从而实现多个线程并发地从通过缓存进行数据汇聚,能提高数据汇聚的效率。实施例二与实施例一相比,本实施例引入了缓存地址队列,并具体对存线程和取线程根据所对应的缓存内存数组的存指针、取指针和缓存标志进行数据包的存储和提取的方法进行进一步阐本文档来自技高网...
一种无锁数据汇聚方法及装置

【技术保护点】
一种无锁数据汇聚方法,其特征在于,包括:在缓存中开辟至少一个缓存内存数组,所述缓存内存数组的属性包括取指针、存指针和用于标识所述存指针是否在所述取指针前面的缓存标志;创建至少一个用于将从客户端提取的数据包保存到缓存内存数组存线程和至少一个用于从缓存内存数组中取出数据包的取线程,以使所开辟的各缓存内存数组均有一个对应的存线程和一个对应的取线程;使所开辟的各缓存内存数组所对应的存线程和取线程根据所对应的缓存内存数组的属性进行线程运行或线程等待,以并行从至少一个客户端提取数据包并进行汇聚。

【技术特征摘要】
1.一种无锁数据汇聚方法,其特征在于,包括:在缓存中开辟至少一个缓存内存数组,所述缓存内存数组的属性包括取指针、存指针和用于标识所述存指针是否在所述取指针前面的缓存标志;创建至少一个用于将从客户端提取的数据包保存到缓存内存数组存线程和至少一个用于从缓存内存数组中取出数据包的取线程,以使所开辟的各缓存内存数组均有一个对应的存线程和一个对应的取线程;分别为各取线程在缓存中开辟至少一个对应的缓存地址队列,所开辟的各缓存地址队列用于存储至少一个所开辟的缓存内存数组中所保存的数据包的地址对象,其中所述地址对象包括用于标识数据包所在的缓存内存数组的缓存内存数组标识;使所开辟的各缓存内存数组所对应的存线程和取线程根据所对应的缓存内存数组的属性进行线程运行或线程等待,以并行从至少一个客户端提取数据包并进行汇聚,其中,使缓存内存数组所对应的存线程用于:接收至少一个客户端中发送的数据包,根据所对应的缓存内存数组的属性将所接收的数据包向所对应的缓存内存数组进行存储,将所存储的数据包的地址信息形成地址对象存储到所对应的缓存内存数组所对应的取线程所对应的缓存地址队列中;使缓存内存数组所对应的取线程用于:从所对应的缓存地址队列中提取地址对象,获取所提取的地址对象中的缓存内存数组标识所对应的缓存内存数组的属性,根据所获取的属性和所提取的地址对象提取数据包,其中,所述根据所对应的缓存内存数组的属性将所接收的数据包向所对应的缓存内存数组进行存储的步骤包括:获取所接收的数据包的大小,获取所对应的缓存内存数组的取指针、存指针和缓存标志;若所述缓存标志为真且所述取指针与所述存指针不相等,则判断所述存指针到所述取指针之间的空间是否小于所接收的数据包的大小,若是则使所述存线程等待,否则对所接收的数据包进行存储;若所述缓存标志为真且所述取指针与所述存指针相等,则使所述存线程等待;若所述缓存标志为假,且所述存指针与所述缓存内存数组的末地址之间的空间小于所接收的数据包的大小,则判断所对应的缓存内存数组的剩余空间是否小于待存储数据包的大小,若是则使所述存线程等待,否则将所述缓存标志更改为真,对所接收的数据包进行存储;若所述缓存标志为假,且所述存指针与所述缓存内存数组的末地址之间的空间不小于所述待存储数据包的大小,则对所接收的数据包进行存储;其中所述对所接收的数据包进行存储的步骤包括:根据所述存指针将所接收的数据包存储到所对应的缓存内存数组中并更改所述存指针,将所接收的数据包在所对应的缓存内存数组中的地址对象记录在所对应的缓存内存数组所指定的缓存地址队列中。2.如权利要求1所述的无锁数据汇聚方法,其特征在于,所述根据所对应的缓存内存数组的属性将所接收的数据包向所对应的缓存内存数组进行存储的步骤包括:获取所接收的数据包的大小,获取所对应的缓存内存数组的取指针、存指针和缓存标志;若所述缓存标志为真且所述取指针与所述存指针不相等,则判断所述存指针到所述取指针之间的空间是否小于所接收的数据包的大小,若是则使所述存线程等待,否则对所接收的数据包进行存储;若所述缓存标志为真且所述取指针与所述存指针相等,则使所述存线程等待;若所述缓存标志为假,且所述存指针与所述缓存内存数组的末地址之间的空间小于所接收的数据包的大小,则判断所述缓存内存数组的起始地址到所述取指针之间的空间是否小于所述待存储数据包的大小,若是则使所述存线程等待,否则将所述缓存标志更改为真,对所接收的数据包进行存储;若所述缓存标志为假,且所述存指针与所述缓存内存数组的末地址之间的空间不小于所述待存储数据包的大小,则对所接收的数据包进行存储;其中所述对所接收的数据包进行存储的步骤包括:根据所述存指针将所接收的数据包存储到所对应的缓存内存数组中并更改所述存指针,将所接收的数据包在所对应的缓存内存数组中的地址对象记录在所对应的缓存内存数组所指定的缓存地址队列中。3.如权利要求1所述的无锁数据汇聚方法,其特征在于,根据所获取的属性和所提取的地址对象提取数据包的步骤具体包括:根据所提取的地址对象向所述地址对象中的缓存内存数组标识对应的缓存内存数组中提取数据包;根据所述地址对象更改所述地址对象中的缓存内存数组标识对应的缓存内存数组的属性中的取指针;判断所述地址对象更改所述地址对象中的缓存内存数组标识对应的缓存内存数组的属性中的取指针与更改前相比是否变小,若是则将所述地址对象更改所述地址对象中的缓存内存数组标识对应的缓存内存数组的属性中的缓存标志设置为否。4.如权利要求1所述的无锁数据汇聚方法,其特征在于,所述地址对象还包括所存储的数据包在缓存中的起始地址和数据长度。5.如权利要求1所述的无锁数据汇聚方法,其特征在于,所述地址对象还包括所存储的数据包在所对应的缓存内存数组中的起始地址的相对地址和数据长度。6.一种无锁数据汇聚装置,其特征在于,包括:缓存内存数组创建单元,用于在缓存中开辟至少一个缓存内存数组,所述缓存内存数组的属性包括取指针、存指针和用于标识所述存指针是否在所述取指...

【专利技术属性】
技术研发人员:李成金郑驰
申请(专利权)人:北京华胜天成科技股份有限公司北京华胜天成软件技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1