基于生产者消费者模型的数据处理方法、系统及存储介质与流程

文档序号:20916638发布日期:2020-05-29 13:36阅读:343来源:国知局
基于生产者消费者模型的数据处理方法、系统及存储介质与流程

本发明属于数据处理领域,特别涉及基于生产者消费者模型的数据处理方法、系统及存储介质。



背景技术:

计算机硬件的飞速发展,多道处理器的性能得到不断提升,得益于内存大幅提升、处理器数量的增加、操作系统的不断优化,大量优秀的软件设计,使得我们能够充分发挥系统性能,提升软件作业效率。

软件设计中存在一种设计模型生产者和消费者模型,解决生产者和消费者之间的强耦合问题,任何的这块设计都可以由一对一(单生产单消费)模型衍生,一对一的设计可以利用优秀的算法设计避开资源的互斥同步,但是一对多的设计因为互斥和资源同步问题,导致无法在消费者越多的情况下充分发挥系统的性能,反而会导致系统的性能下降。



技术实现要素:

发明目的:本发明针对现有技术存在的问题,提出了一种能够有效提高系统数据处理速度的基于生产者消费者模型的数据处理方法。

技术方案:为实现上述目的,本发明提供了一种基于生产者消费者模型的数据处理方法,建立生产者消费者模型对数据进行处理,其中,根据消费者的数量生成环状缓冲区,环状缓冲区中每个单元用于存放每个消费者对应的数据队列的地址;消费者中包括一个哨兵消费者,所述哨兵消费者轮询是否有全局的可处理数量,如果有全局的可处理数量,哨兵消费者唤醒其他消费者,其他消费者被唤醒后则处理对应数据列队中的数据,每处理一个数据,全局的可处理数量自减,直到全局的可处理数量小于阈值,其他消费者进入休眠状态,哨兵消费者回到轮询步骤;生产者产生数据后平均分配到每个消费者对应的数据队列中,每产生一个数据,全局的可处理数量自增,数据产生总量自增。

进一步,所述每个消费者对应的数据队列为无锁队列。无锁队列可以让生产和消费者之间解耦,之间不需要资源竞争冲突,提高程序并行操作,从而提高处理性能。

进一步,所述生产者根据数据产生总量与消费者数量之间求模运算得到产生的数据即将存放到的数据队列的编号。这样可以使数据平均的分配到每个消费者对应的数据队列中,从而能够有效的提高数据的处理速度。

本发明还提供了一种基于生产者消费者模型的数据处理系统,包括处理单元、存储单元和缓存单元;所述存储单元用于存储数据;所述处理单元用于将产生的数据存入存储单元,并处理存储单元中存储的数据;处理单元中包括消费者处理模块和生产者处理模块,消费者处理模块中包括多个消费者,所述缓存单元中根据消费者的数量生成环状缓冲区,环状缓冲区中每个单元用于存放每个消费者对应的数据队列的地址;消费者中至少包括哨兵消费者,所述哨兵消费者轮询是否有全局的可处理数量,如果有全局的可处理数量,哨兵消费者唤醒其他消费者,其他消费者被唤醒后则处理对应数据列队中的数据,每处理一个数据,全局的可处理数量自减,直到全局的可处理数量小于阈值,其他消费者进入休眠状态,哨兵消费者回到轮询步骤;生产者处理模块中包括至少一个生产者,所述生产者产生数据后平均分配到每个消费者对应的数据队列中,每产生一个数据,全局的可处理数量自增,数据产生总量自增。

其中,所述每个消费者对应的数据队列为无锁队列;待处理的数据的内存地址插入无锁队列的头部。

本发明还提供了一种存储介质,所述存储介质上保存有程序,所述程序被运行时执行上述基于生产者消费者模型的数据处理方法。

还提供了一种处理器,所述处理器用于运行程序,其中,所述程序被运行时执行上述基于生产者消费者模型的数据处理方法。

工作原理:本发明对采用的生产者和消费者模型进行了改进,消费者和生产者的线程均独立并行工作。生产者生产数据并且平均分配给每个消费者;消费者中的哨兵消费者关注是否有可处理数量,如果有则唤醒其他消费者,其他消费通过对应的地址找到对应的待处理的数据队列,并对数据队列中的数据进行处理,处理结束后,其他消费者进入休眠状态,哨兵消费者进行可处理数量的检测。消费者和生产者之间不需要进行消息的传递,实现了一个生产者对多个消费者的解耦,同时,生产者可以一直持续生产数据,不会被任何消费者干扰,能够实现生产最大化。

有益效果:与现有技术相比,本发明提供的方法中,生产者和消费者之间完全解耦,没有互斥冲突,能够随着消费者数量的增加提高数据处理性能,从而最大程度的提高系统并行处理速度。

附图说明

图1为实施例中电子设备结构示意图;

图2为实施例中生产者处理模块的工作流程图;

图3为实施例中消费者处理模块的工作流程图。

具体实施方式

下面将结合本发明实例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本实施例提供一种基于生产者消费者模型的数据处理方法,该方法可以应用于电子设备中。该电子设备可以为网络设备、信息技术设备、用户终端。该电子设备可以但不限于:软件定义网络控制器、交换机、路由器、通用服务器、个人电脑、笔记本、平板电脑、智能终端等。

如图1所示,该电子设备包括:处理器1、存储器2和缓存3,处理器1、存储器2和缓存3可以通过总线进行连接,也可以通过其他结构进行连接。处理器1可以为中央处理器、一个或多个用于控制程序执行的集成电路、可以是使用fpga开发的硬件电路,也可以是基带处理器等。处理器1至少有两个处理内核可以并行处理数据。存储器2包括只读存储器、随机存取存储器和磁盘存储器;存储器2用于存储处理1在运行时所需的数据。存储器2可以为内存、硬盘、u盘等。缓存3是可以进行高速数据交换的存储器、它先于内存与处理器1交换数据,所以速率很快;缓存3用于存储待处理数据的地址。

本实施例公开的基于生产者消费者模型的数据处理方法为:在处理器中建立一个生产者多个消费者模型对数据进行处理,其中生产者消费者模型分为生产者处理模块和消费者处理模块,生产者处理模块和消费者处理模块并行处理数据。其中,在整个系统中产生数据即为生产者消费者模型中的生产者,按照生产者处理模块中的线程进行工作;在整个系统中对数据进行处理的单元即为生产者消费者模型中的消费者,按照消费者处理模块中的线程进行工作。缓存3中包括根据消费者的数量生产的环形缓冲区、全局的可处理数量、全局的总生产数量和每个队列当前可处理的数量;其中,环形缓冲区基于数组的方式实现,环形缓冲区中有n个单元,每个单元即为一个数组,每个单元编号和消费者的编号相对应,环形缓冲区中每个单元用于存储对应消费者的数据队列的地址,n为消费者的数量。每个消费者均有一个对应的无锁队列,无锁队列可以存储在缓存3中,主要用于存储待处理的数据的地址。全局的可处理数量、全局的总生产数量和每个队列当前可处理的数量均为无锁访问的原子变量。

如图2所示,生产者处理模块的工作线程,包括以下步骤:

步骤11:生产者产生一个数据,全局的可处理数量和全局的总生产数量均加1;

步骤12:全局的总生产数量和消费者数量进行求模运算,得到的结果即为所产生的这个数据即将存储的消费者的编号;

步骤13:根据步骤12得到的消费者的编号,将产生的数据在存储器中的地址放入对应编号的消费者对应的无锁队列的头部;该消费者对应的无锁队列的当前可处理的数量加1,重复步骤11~13。

如图3所示,消费者处理模块的工作线程,包括以下步骤:

步骤21:设定编号最小的消费者为哨兵消费者;进行初始判断,每个消费者判断是否有全局的可处理数量,没有全局的可处理数量,则进入步骤22,有全局的可处理数量,则进入步骤23。

步骤22:哨兵消费者轮询是否有全局的可处理数量,其余消费者休眠等待被哨兵消费者唤醒。如果有全局的可处理数量,则进入步骤25;如果没有全局的可处理数量,则重复步骤22;

步骤23:每个消费者通过自身的编号访问环形缓冲区中对应的单元,获取对应的无锁队列的地址,循环处理无锁队列中的数据,每处理完成一个数据,则全局的可处理数量和所在队列当前可处理的数量均减一,消费者处理完成当前无锁队列中所有数据后,进入步骤24;

步骤24:每个消费者各自判断全局的可处理数量是否小于阀值,如果全局的可处理数量小于阈值,则每个消费者判断对应的队列中当前可处理的数量是否为0,如果为0,则其他消费者进入休眠状态,哨兵消费者进入步骤22,如果不为0,则进入步骤23;如果全局的可处理数量不小于阈值,则进入步骤23。其中阈值可以设置为消费者的数量。

步骤25:哨兵消费者给其他消费者发送消息,唤醒其他消费者,所有消费者进入步骤23。

在一个实施例中,提供一种基于生产者消费者模型的数据处理系统,包括处理单元、存储单元和缓存单元;存储单元用于存储数据;处理单元用于将产生的数据存入存储单元,并处理存储单元中存储的数据;处理单元中包括消费者处理模块和生产者处理模块,消费者处理模块中包括多个消费者,缓存单元中根据消费者的数量生成环状缓冲区,环状缓冲区中每个单元用于存放每个消费者对应的数据队列的地址;消费者中至少包括一个哨兵消费者,哨兵消费者轮询是否有全局的可处理数量,如果有全局的可处理数量,哨兵消费者唤醒其他消费者,其他消费者被唤醒后则处理对应数据列队中的数据,每处理一个数据,全局的可处理数量自减,直到全局的可处理数量小于阈值,其他消费者进入休眠状态,哨兵消费者轮询是否有全局的可处理数量,如果没有全局的可处理数量,则哨兵消费者一直轮询;生产者处理模块中包括至少一个生产者,生产者产生数据后依次存储到每个消费者对应的数据队列中,每产生一个数据,全局的可处理数量自增,数据产生总量自增。数据队列可以但不限于采用无锁队列,采用无锁队列可以让生产和消费者之间解耦,之间不需要资源竞争冲突,提高程序并行操作,从而提高处理性能。待处理数据的存储地址依次存储在每个消费者对应的无锁队列的头部。

在实施性实施例中,还提供了一种包括程序的存储介质,例如包括程序的存储器,其中,公开所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。

本发明提供的方法可以但不限于对安全防火墙等等的网关改造,能够大幅度提高了报文的处理速率。dhcp(动态主机配置协议)服务器,在传统方法下,8核心处理器、32g内存,dhcp报文的处理能力在8000左右的速率,采用本实施例提供的方法,可以提高到13000左右的速率,并且设备性能更强,随着增加消费数量还可以持续提高。

本发明提供的方法还可以衍生到多生产者多消费者情况下对数据进行处理,每个单独的生产者用独立的线程操作,每个生产者根据自己线程的编号关联对应的多个消费者和缓存,每个生产者可以通过自己线程的编号到找到对应的处理数据的消费者和对应的缓存地址。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1