发明名称 一种无锁数据汇聚方法及装置
摘要 本发明公开了一种无锁数据汇聚方法及装置,方法包括:在缓存中开辟至少一个缓存内存数组,所述缓存内存数组的属性包括取指针、存指针和用于标识所述存指针是否在所述取指针前面的缓存标志;创建至少一个用于将从客户端提取的数据包保存到缓存内存数组存线程和至少一个用于从缓存内存数组中取出数据包的取线程,以使所开辟的各缓存内存数组均有一个对应的存线程和一个对应的取线程;使所开辟的各缓存内存数组所对应的存线程和取线程根据所对应的缓存内存数组的属性进行线程运行或线程等待,以并行从至少一个客户端提取数据包并进行汇聚。本发明实施例能实现多个线程并发地通过缓存进行数据汇聚,能提高数据汇聚的效率。
申请公布号 CN103488717B 申请公布日期 2017.02.22
申请号 CN201310413005.2 申请日期 2013.09.11
申请人 北京华胜天成科技股份有限公司;北京华胜天成软件技术有限公司 发明人 李成金;郑驰
分类号 G06F17/30(2006.01)I;G06F9/46(2006.01)I;H04L29/06(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 北京品源专利代理有限公司 11332 代理人 胡彬
主权项 一种无锁数据汇聚方法,其特征在于,包括:在缓存中开辟至少一个缓存内存数组,所述缓存内存数组的属性包括取指针、存指针和用于标识所述存指针是否在所述取指针前面的缓存标志;创建至少一个用于将从客户端提取的数据包保存到缓存内存数组存线程和至少一个用于从缓存内存数组中取出数据包的取线程,以使所开辟的各缓存内存数组均有一个对应的存线程和一个对应的取线程;分别为各取线程在缓存中开辟至少一个对应的缓存地址队列,所开辟的各缓存地址队列用于存储至少一个所开辟的缓存内存数组中所保存的数据包的地址对象,其中所述地址对象包括用于标识数据包所在的缓存内存数组的缓存内存数组标识;使所开辟的各缓存内存数组所对应的存线程和取线程根据所对应的缓存内存数组的属性进行线程运行或线程等待,以并行从至少一个客户端提取数据包并进行汇聚,其中,使缓存内存数组所对应的存线程用于:接收至少一个客户端中发送的数据包,根据所对应的缓存内存数组的属性将所接收的数据包向所对应的缓存内存数组进行存储,将所存储的数据包的地址信息形成地址对象存储到所对应的缓存内存数组所对应的取线程所对应的缓存地址队列中;使缓存内存数组所对应的取线程用于:从所对应的缓存地址队列中提取地址对象,获取所提取的地址对象中的缓存内存数组标识所对应的缓存内存数组的属性,根据所获取的属性和所提取的地址对象提取数据包,其中,所述根据所对应的缓存内存数组的属性将所接收的数据包向所对应的缓存内存数组进行存储的步骤包括:获取所接收的数据包的大小,获取所对应的缓存内存数组的取指针、存指针和缓存标志;若所述缓存标志为真且所述取指针与所述存指针不相等,则判断所述存指针到所述取指针之间的空间是否小于所接收的数据包的大小,若是则使所述存线程等待,否则对所接收的数据包进行存储;若所述缓存标志为真且所述取指针与所述存指针相等,则使所述存线程等待;若所述缓存标志为假,且所述存指针与所述缓存内存数组的末地址之间的空间小于所接收的数据包的大小,则判断所对应的缓存内存数组的剩余空间是否小于待存储数据包的大小,若是则使所述存线程等待,否则将所述缓存标志更改为真,对所接收的数据包进行存储;若所述缓存标志为假,且所述存指针与所述缓存内存数组的末地址之间的空间不小于所述待存储数据包的大小,则对所接收的数据包进行存储;其中所述对所接收的数据包进行存储的步骤包括:根据所述存指针将所接收的数据包存储到所对应的缓存内存数组中并更改所述存指针,将所接收的数据包在所对应的缓存内存数组中的地址对象记录在所对应的缓存内存数组所指定的缓存地址队列中。
地址 100192 北京市海淀区学清路8号科技财富中心A座11层