一种基于LRU的优化生产者消费者问题排重的方法技术

技术编号:7471302 阅读:310 留言:0更新日期:2012-07-02 00:53
本发明专利技术提供了一种基于LRU算法的优化生产者消费者问题中排重的方法,该发明专利技术提供的基于LRU算法实现优化生产者消费者问题中生产重复生产同一产品的问题。将通过使用已经实现了LRU算法的LinkedHashMap处理相同产品过滤的问题。LRU算法是LinkedHashMap本身通过双向链表来实现,当某个位置被使用(例如get操作),通过调整链表的指向将该位置调整到头位置,新加入的内容直接放在链表头,如此一来,最近被使用的内容就向链表头移动,需要替换时(已经达到容量时),链表最后的位置就是最近最少使用的位置。在多线程通过LinkedHashMap以最快方式实现缓冲区内数据排重问题,避免多个生产者并发时造成生产同一产品的问题。

【技术实现步骤摘要】

本专利技术涉及计算机领域,具体的说就是基于LRU算法解决生产者消费者问题中过滤多个生产者生产同一产品的方法。
技术介绍
在实际的软件开发过程中,经常会碰到如下场景某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。单单抽象出生产者和消费者,还够不上是生产者/消费者模式。该模式还需要有一个缓冲区处于生产者和消费者之间,作为一个中介。生产者把数据放入缓冲区,而消费者从缓冲区取出数据。在实际的软件环境中生产者会有不止一个,这样就会产生不同的生产者同时生产相同的产品。一个产品被多次生产出来,再次放入缓冲区会对整个生产消费过程产生恶劣甚至灾难性的后果。然而当消费者消费产品失败时,对产品的处理是一个头痛的问题。很多算法实现放入缓冲区时进行过滤,运用的方法主要包括逐个对比法、循环遍历法。处理消费失败产品的主要方式包括线程直接跳过、向上抛异常等。这两个问题的处理不当都会给用户数据信息的安全和完整带来隐患。针对上述两个问题,本专利技术提供一种基于LRU算法的优化生产者消费者问题中排重的方法,同时还解决当消费者消费产品失败时失败产品的再次处理问题。通过本方法能够高效的解决现实中类似生产者消费者处理不同生产者生产同一产品的问题。
技术实现思路
本专利技术的目的是提供一种基于LRU的优化生产者消费者问题排重的方法,具体讲就是在生产者消费者问题中解决多个生产者并发生产同一产品的问题。利用LinkedHashMap实现一个固定容量的基于最近最少使用算法的缓存类,在生产者消费者问题中解决多个生产者生产同一产品的问题,同时还解决当消费者消费产品失败时失败产品的再次处理问题,解决类似生产者消费者过程中在生产者生产过程中实现过滤重复产品的问题,处理步骤是被消费者处理的数据仍旧保留在LinkedHashMap中,而发生异常的则从 LinkedHashMap中删除掉,生产者并发抓取数据放入缓冲区中时,如果LinkedHashMap中已经存在该数据,则不需要再次放入,包括已经被生产者消费掉的数据,从而达到排重目的。其作用为过滤产品防止重复消费,允许线程并发。需要LinkedHashMap作为辅助工具实现具体过滤数据功能。本方法使用LinkedHashMap进行数据处理,处理步骤是被消费者处理的数据仍旧保留在LinkedHashMap中,而发生异常的则从LinkedHashMap中删除掉,生产者并发抓取数据放入缓冲区中时,如果LinkedHashMap中已经存在该数据则不需要再次放入,包括已经被生产者消费掉的数据,从而达到排重目的。具体实施方式本专利技术提供了一种基于LRU算法的优化生产者消费者问题中排重的方法, 利用LinkedHashMap的特性在一个固定容量的基于最近最少使用的算法实现排重。首先介绍LRU算法,LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的,目的为节省利用容量不大的内存为最多的进程提供资源。LRU算法的提出,是基于这样一个事实在前面几条指令中使用频繁的页面很可能在后面的几条指令中频繁使用。反过来说,已经很久没有使用的页面很可能在未来较长的一段时间内不会被用到。这个,就是著名的局部性原理——比内存速度还要快的cache,也是基于同样的原理运行的。因此,我们只需要在每次调换时,找到最近最少使用的那个页面调出内存。这就是LRU算法的全部内容。在实际的软件开发过程中,生产者消费者问题随处可见,以海量群发邮件为例说明情况。数据库中有海量待发的客户邮件地址,生产者线程(抓取数据线程)会从数据库中抓取数据放入缓冲区,消费者线程(发送邮件线程)会去缓冲区读取数据并发送邮件。在整个读取数据并发送邮件的过程中可能会出现两个问题第一个线程去数据库抓取数据放入缓存,但是这些数据还没有被消费者处理掉,可是第二个线程有可能去数据库中取出相同的数据放入缓冲区。权利要求1.一种基于LRU的优化生产者消费者问题排重的方法,利用LinkedHashMap实现一个固定容量的基于最近最少使用算法的缓存类,在生产者消费者问题中解决多个生产者生产同一产品的问题,同时还解决当消费者消费产品失败时失败产品的再次处理问题, 解决类似生产者消费者过程中在生产者生产过程中实现过滤重复产品的问题,其特征在于,使用LinkedHashMap进行数据处理,处理步骤是被消费者处理的数据仍旧保留在 LinkedHashMap中,而发生异常的则从LinkedHashMap中删除掉,生产者并发抓取数据放入缓冲区中时,如果LinkedHashMap中已经存在该数据,则不需要再次放入,包括已经被生产者消费掉的数据,从而达到排重目的。2.根据权利要求1所述的方法,其特征在于其作用为过滤产品防止重复消费,允许线程并发。3.根据权利要求1所述的方法,其特征在于需要LinkedHashMap作为辅助工具实现具体过滤数据功能。全文摘要本专利技术提供了一种基于LRU算法的优化生产者消费者问题中排重的方法,该专利技术提供的基于LRU算法实现优化生产者消费者问题中生产重复生产同一产品的问题。将通过使用已经实现了LRU算法的LinkedHashMap处理相同产品过滤的问题。LRU算法是LinkedHashMap本身通过双向链表来实现,当某个位置被使用(例如get操作),通过调整链表的指向将该位置调整到头位置,新加入的内容直接放在链表头,如此一来,最近被使用的内容就向链表头移动,需要替换时(已经达到容量时),链表最后的位置就是最近最少使用的位置。在多线程通过LinkedHashMap以最快方式实现缓冲区内数据排重问题,避免多个生产者并发时造成生产同一产品的问题。文档编号G06F9/44GK102520955SQ201110424508公开日2012年6月27日 申请日期2011年12月19日 优先权日2011年12月19日专利技术者赵文文 申请人:浪潮电子信息产业股份有限公司本文档来自技高网...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:赵文文
申请(专利权)人:浪潮电子信息产业股份有限公司
类型:发明
国别省市:

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

1
相关领域技术