一种基于环形缓冲区的异步消费方法和装置制造方法及图纸

技术编号:28418558 阅读:18 留言:0更新日期:2021-05-11 18:25
本发明专利技术公开了一种基于环形缓冲区的异步消费方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:计算环形缓冲区中写指针所对应的地址和读指针所对应的地址之间的实时距离,判断实时距离是否大于安全区距离;若是,将写线程中的用户记录依次写入环形缓冲区;通过读线程从环形缓冲区中读取用户记录,写入远端队列,以实现异步消费。该实施方式能够避免读写并发问题,降低时耗、显著提升异步消费的效率。

【技术实现步骤摘要】
一种基于环形缓冲区的异步消费方法和装置
本专利技术涉及计算机
,尤其涉及一种基于环形缓冲区的异步消费方法和装置。
技术介绍
当用户通过外部渠道访问网页时,网络营销系统会对带采样参数的链接访问记录做持久化处理。常用的持久化处理方式包括:一、同步写入数据库/远端队列,将每次用户访问记录都写入数据库/远端队列后再返回;二、异步写入数据库/远端队列,将用户访问记录缓存在本地队列,然后通过后台线程批量写入数据库,或者通过后台线程单个拉取,进行序列化后发送至远端队列。在实现本专利技术过程中,专利技术人发现现有技术中至少存在如下问题:1.同步写入时,面对大量请求会导致写入效率下降,产生较多耗时;2.异步写入数据库时,易造成内存溢出或阻塞用户请求线程,导致用户请求时延增加;3.异步写入远端队列时,后台线程的每次单个拉取都会造成CAS(compareandswap,比较并交换)竞争,造成CPU(CentralProcessingUnit,中央处理器)浪费。
技术实现思路
有鉴于此,本专利技术实施例提供一种基于环形缓冲区的异步消费方法和装置,能够避免读写并发问题,降低时耗、显著提升异步消费的效率。为实现上述目的,根据本专利技术实施例的第一方面,提供了一种基于环形缓冲区的异步消费方法,包括:计算环形缓冲区中写指针所对应的地址和读指针所对应的地址之间的实时距离,判断实时距离是否大于安全区距离;若是,将写线程中的用户记录依次写入环形缓冲区;通过读线程从环形缓冲区中读取用户记录,写入远端队列,以实现异步消费。进一步地,在通过读线程从环形缓存区中读取用户记录的步骤之前,基于环形缓冲区的异步消费方法还包括:确定写指针所对应的地址与唤醒指针所对应的地址一致。进一步地,计算环形缓冲区中写指针所对应的地址和读指针所对应的地址之间的实时距离的步骤包括:将写指针所对应的地址和读指针所对应的地址换算成数组下标,计算数组下标之间的实时距离。进一步地,通过读线程从环形缓冲区中读取用户记录的步骤包括:循环执行下列步骤:判断读指针所对应的地址中是否存在用户记录,若存在,将用户记录添加至消费表中,并将读指针所对应的地址下移一位;直至读指针所对应的地址中不存在用户记录或者消费表中的用户记录数量等于数量阈值。进一步地,若读指针所对应的地址中不存在用户记录,将读指针所对应的地址设置为唤醒指针所对应的地址并进行等待,在等待时长超过阈值时长的情况下,进行循环执行步骤。进一步地,在写入远端队列的步骤之前,基于环形缓冲区的异步消费方法还包括:将从环形缓冲区中读取的用户记录进行序列化处理。根据本专利技术实施例的第二方面,提供了一种基于环形缓冲区的异步消费装置,包括:实时距离计算模块,用于计算环形缓冲区中写指针所对应的地址和读指针所对应的地址之间的实时距离;安全区距离模块,用于判断实时距离是否大于安全区距离;写入模块,在实时距离大于安全区距离的情况下,写入模块用于将写线程中的用户记录依次写入环形缓冲区;读取模块,用于通过读线程从环形缓冲区中读取用户记录,写入远端队列,以实现异步消费。进一步地,基于环形缓冲区的异步消费装置还包括地址确定模块,在读取模块读取用户记录之前,地址确定模块用于确定写指针所对应的地址与唤醒指针所对应的地址一致。根据本专利技术实施例的第三方面,提供了一种终端,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现如上述任一种基于环形缓冲区的异步消费方法。根据本专利技术实施例的第四方面,提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如上述任一种基于环形缓冲区的异步消费方法。上述专利技术中的一个实施例具有如下优点或有益效果:因为采用计算环形缓冲区中写指针所对应的地址和读指针所对应的地址之间的实时距离,判断所述实时距离是否大于安全区距离;若是,将写线程中的用户记录依次写入环形缓冲区;通过读线程从所述环形缓冲区中读取用户记录,写入远端队列,以实现异步消费的技术手段,所以克服了现有技术中存在的效率低下、时延较长、易出现读写并发的技术问题,进而达到避免读写并发问题,降低时耗、显著提升异步消费的效率的技术效果。上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。附图说明附图用于更好地理解本专利技术,不构成对本专利技术的不当限定。其中:图1是根据本专利技术第一实施例提供的基于环形缓冲区的异步消费方法的主要流程的示意图;图2a是根据本专利技术第二实施例提供的基于环形缓冲区的异步消费方法的主要流程的示意图;图2b是图2a所述方法中的ringbuffer结构示意图;图3是根据本专利技术实施例提供的基于环形缓冲区的异步消费装置的主要模块的示意图;图4是本专利技术实施例可以应用于其中的示例性系统架构图;图5是适于用来实现本专利技术实施例的终端设备或服务器的计算机系统的结构示意图。具体实施方式以下结合附图对本专利技术的示范性实施例做出说明,其中包括本专利技术实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本专利技术的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。图1是根据本专利技术第一实施例提供的基于环形缓冲区的异步消费方法的主要流程的示意图,如图1所示,本专利技术实施例提供的基于环形缓冲区的异步消费方法包括:步骤S101,计算环形缓冲区中写指针所对应的地址和读指针所对应的地址之间的实时距离,判断实时距离是否大于安全区距离。若否,即上述实时距离小于安全区距离,则结束;若是,即上述实时距离大于安全区距离,则执行步骤S102。安全区(safezone)是为了防止写线程和读线程并发问题而设置的,安全区距离不低于写线程的线程数,通过上述设置可以采用较少的空间规避读写线程并发问题。根据本专利技术实施例,在通过读线程从环形缓存区中读取用户记录的步骤之前,基于环形缓冲区的异步消费方法还包括:确定写指针所对应的地址与唤醒指针所对应的地址一致。通过判断写指针所对应的地址是否与唤醒指针所对应的地址是否相等,若相等则表明有读线程在此等待,此时唤醒所有在该地址等待的读线程,进行读取操作,能够有效提升读取的效率。具体地,根据本专利技术一实施例,上述计算环形缓冲区中写指针(pushIndex)所对应的地址和读指针(pollIndex)所对应的地址之间的实时距离的步骤包括:将写指针所对应的地址和读指针所对应的地址换算成数组下标,计算数组下标之间的实时距离。在进行上述步骤之前,先将初始化环形缓冲区(ringbuffer)数组,,以分配ringbuffer数组内的内存空间,数组内的元素均默认为NUL本文档来自技高网...

【技术保护点】
1.一种基于环形缓冲区的异步消费方法,其特征在于,包括:/n计算环形缓冲区中写指针所对应的地址和读指针所对应的地址之间的实时距离,判断所述实时距离是否大于安全区距离;/n若是,将写线程中的用户记录依次写入环形缓冲区;/n通过读线程从所述环形缓冲区中读取用户记录,写入远端队列,以实现异步消费。/n

【技术特征摘要】
1.一种基于环形缓冲区的异步消费方法,其特征在于,包括:
计算环形缓冲区中写指针所对应的地址和读指针所对应的地址之间的实时距离,判断所述实时距离是否大于安全区距离;
若是,将写线程中的用户记录依次写入环形缓冲区;
通过读线程从所述环形缓冲区中读取用户记录,写入远端队列,以实现异步消费。


2.根据权利要求1所述的基于环形缓冲区的异步消费方法,其特征在于,在所述通过读线程从所述环形缓存区中读取用户记录的步骤之前,所述基于环形缓冲区的异步消费方法还包括:确定所述写指针所对应的地址与唤醒指针所对应的地址一致。


3.根据权利要求1所述的基于环形缓冲区的异步消费方法,其特征在于,所述计算环形缓冲区中写指针所对应的地址和读指针所对应的地址之间的实时距离的步骤包括:将所述写指针所对应的地址和读指针所对应的地址换算成数组下标,计算所述数组下标之间的实时距离。


4.根据权利要求1所述的基于环形缓冲区的异步消费方法,其特征在于,所述通过读线程从环形缓冲区中读取用户记录的步骤包括:
循环执行下列步骤:判断读指针所对应的地址中是否存在用户记录,若存在,将所述用户记录添加至消费表中,并将所述读指针所对应的地址下移一位;
直至所述读指针所对应的地址中不存在用户记录或者所述消费表中的用户记录数量等于数量阈值。


5.根据权利要求4所述的基于环形缓冲区的异步消费方法,其特征在于,若所述读指针所对应的地址中不存在用户记录,将所述读指针所对应的地址设置为唤醒指针所对应的...

【专利技术属性】
技术研发人员:李成林冉光旭
申请(专利权)人:北京京东尚科信息技术有限公司北京京东世纪贸易有限公司
类型:发明
国别省市:北京;11

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

1