自从前段时间的一个事故让队列里缓存的大量关键数据丢失后,一直琢磨着弄一个能持久化到本地文件的队列,这样即使系统再次发生意外,我也不至于再苦逼的修数据了.选定使用mappedbytebuffer来实现,但做出来的原型不够理想.<高性能队列Fqueue的设计和使用实践>这篇文章给了我莫大的帮助. 当然只是借鉴了大致的文件系统结构,绝大部分还是按自己的想法来的. 上图就是队列的文件系统,index文件记录了队列当前的读写文件号,读写位置和读写计数.队列的size是通过读写计数writeCounter…
转自:http://guoyunsky.iteye.com/blog/1169912 队列很常见,但大部分的队列是将数据放入到内存.如果数据过多,就有内存溢出危险,而且长久占据着内存,也会影响性能.比如爬虫,将要抓取的URL放到内存,而URL过多,内存肯定要爆.在读Heritrix源码中,发现Heritrix是基于Bdb实现了一个持久化队列,于是我就将这块代码独立出来,平时使用也蛮爽的,现在拿出来共享.同时数据已经持久化,相比放在内存的一次性,可以循环累加使用. 大家也知道BDB的高性能和嵌入式…
Problem G. Persistent QueueTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88258#problem/G Description Persistent data structures are designed to allow access and modication of any version of data st…
import pika connection = pika.BlockingConnection( pika.ConnectionParameters('localhost'))#建立一个最基本的socket chanel = connection.channel()#声明一个管道 chanel.queue_declare(queue='name1',durable=True)#给管道创建一个队列,参数是管道队列名. #持久化队列 chanel.basic_publish(exchange=''…
作者:RobanLee 原创文章,转载请注明: 萝卜李 http://www.robanlee.com 源码在这里: https://github.com/robanlee123/RobCron 时间有限,就不详细注释,有问题或者意见欢迎@我,也欢迎大家批评指正. 本文所必须的一些资料如下: 1. NODEJS ==> 可以去NODEJS.ORG下载最新的源码.2. Redis ==> Redis.io3. KUE ==> Nodejs的一个开源队列系统4. NODE-SCHEDULE…
学习云风的skynet源代码,简单记录下. void skynet_globalmq_push(struct message_queue * queue) { struct global_queue *q= Q; uint32_t tail = GP(__sync_fetch_and_add(&q->tail,1)); // only one thread can set the slot (change q->queue[tail] from NULL to queue) if (!…
这篇里面有一些主要的概念,理解概念是件有意义的事情,仅仅有理解概念才干在面对详细问题的时候找到正确的解决思路.先看一下管程的概念 第一次在书上看到管程这个中文名称认为非常迷糊,管程究竟是个什么东东,于是去找了英文原本对比一看.英文是Monitor,这不是监视器吗,更加迷糊了.为啥翻译成管程?去百科上搜了下管程,管程的定义例如以下:"一个管程定义了一个数据结构和可以并发进程所运行的一组操作,这组操作能同步进程和改变管程中的数据". 从这个定义中可以看到管程事实上和类的概念非常相似.类是广…
借助juc里的ReentrantLock实现一个阻塞队列结构: package demo.concurrent.lock.queue; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; /** * @author sunqinwen * @version \: SimpleQueue.java,v 0.1 2019-01-16 14:47 * 利用重入锁和重入…
import heapq class PriorityQueue: def __init__(self): self._queue=[] self._index=0 def push(self,item,priority): heapq.heappush(self._queue,(-priority,self._index,item)) self._index+=1 def pop(self): return heapq.heappop(self._queue)[-1] class Item:…
PHP写一个双向队列,其实是在考察PHP几个内置数组的函数 用PHP写一个双向队列 <?php class Deque{ public $queue = array(); /** * 尾部入对 * @param [type] $value [description] */ public function addLast($value){ return array_push($this->queue,$value); } /** * 尾部出队 * @return [type] [descript…
GitHub 9.4k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 9.4k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 9.4k Star 的Java工程师成神之路 ,真的确定不来了解一下吗? 众所周知,redis是一个高性能的key-value数据库,在NoSQL数据库市场上,redis自己就占据了将近半壁江山,足以见到其强大之处.同时,由于redis的单线程特性,我们可以将其用作为一个消息队列.本篇文章就来讲讲如何将redis整合到s…
是否有同样的经历?面试官问你做过啥项目,我一顿胡侃,项目利用到了消息队列,kafka,rocketMQ等等. 好的,那请开始你的表演,面试官递过一支笔:给我手写一个消息队列!!WHAT? 为了大家遇到这种场景还能愉快的zhuangbi,所以写一篇文章,凑合用一下. 想要实现一个消息队列,我们需要关组以下几点: 1.首先有一个队列(FIFO)来存放消息 2.消息队列容量有限 3.需要入队,出队方法 4.需要考虑多线程并发情况 <1>.简单版:用LinkedList实现一个简单的消息队列 这里用L…
前言 消息队列是软件系统领域用来实现系统间通信最广泛的中间件.基于消息队列的方式是指由应用中的某个系统负责发送消息,由关心这条消息的相关系统负责接收消息,并在收到消息后进行各自系统内的业务处理.消息可以非常简单,比如只包含文本字符串:也可以很复杂,比如包含字节流.字节数组,还可以包含嵌入对象,甚至是Java对象(经过序列化的对象). 消息在被发送后可以立即返回,由消息队列来负责消息的传递,消息发布者只管将消息发布到消息队列而不用管谁来取,消息使用者只管从消息队列中取消息而不管是谁发布的,这样发布…
前言 用Java如何设计一个阻塞队列,这个问题是在面滴滴的时候被问到的.当时确实没回答好,只是说了用个List,然后消费者再用个死循环一直去监控list的是否有值,有值的话就处理List里面的内容.回头想想,自己真是一个大傻X,也只有我才会这么设计一个阻塞队列(再说,我这也不是阻塞的队列). 结果自己面试完之后,也没去总结这部分知识,然后过了一段时间,某教育机构的面试又被问到类似的问题了,只不过是换了一个形式,"请用wait方法和notify方法实现一套有生产者和消费者的这种逻辑".然…
class Program { class TestEnqueue { static Queue<string> str = new Queue<string>(); public static void AddEnqueue() { ; i < ; i++) { string s= i.ToString(); Console.WriteLine("Task1 now runing"); str.Enqueue(s); } } public static…
Fxx and game Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 688    Accepted Submission(s): 162 Problem Description Young theoretical computer scientist Fxx designed a game for his students. In…
1.简介 deque,全名double-ended queue,是一种具有队列和栈的性质的数据结构.双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行.双向队列(双端队列)就像是一个队列,但是你可以在任何一端添加或移除元素. 参考:http://zh.wikipedia.org/zh-cn/%E5%8F%8C%E7%AB%AF%E9%98%9F%E5%88%97 2.PHP实现代码 <?php class DoubleQueue { public $queue = array()…
作者: RobanLee 原创文章,转载请注明: 萝卜李 http://www.robanlee.com MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们>.消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过 队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求.其…
demo1 实现一个按优先级排序的队列, 并且在这个队列上面每次 pop 操作总是返回优先级最高的那个元素 import heapq class PriorityQueue: def __init__(self): self._queue = [] self._index = def push(self, item, priority): heapq.heappush(self._queue, (-priority, self._index, item)) self._index += def…
前言 从之前的阻塞队列的源码分析中,我们知道,JDK 中的阻塞队列是使用 ReentrantLock 和 Condition 实现了,我们今天来个简易版的.代码如下: 代码 public class BoundedBuffer { final ReentrantLock lock = new ReentrantLock(); final ConditionObject notFull = (ConditionObject) lock.newCondition(); final Condition…
栈与队列都是具有特殊存取方式的线性表,栈属于先进后出(FILO),而队列则是先进先出(FIFO).栈能够将递归问题转化为非递归问题,这是它的一个重要特性.除了FILO.FIFO这样的最普遍存取方式外,还有一些扩展的数据结构,如双端队列.双栈.超队列.超栈等,它们是一种扩展与变异结构. 线性表有顺序存储和链接存储两类,这是针对计算机的线性存储空间作出的分类.前者可以是数组,后者可以是链表.字符串是线性表最常见的应用. 这里我用C语言实现了一个基于数组环形队列,它具有固定的队列空间.相比于链表实现,…
[线程间通信概念] 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体必用方式之一.当线程存在通信指挥,线程间的交互性会更强大,在提高CPU利用率的同时还会使开发人员对线程任务的处理过程中进行有效的把控和监督. [使用wait和notify的注意点] 1.wait和notify必须配合synchronized关键字使用 2.wait方法释放锁,而notify不会释放锁 [BlockingQueue] 阻塞队列,支持阻塞的机制,阻塞地放入和得到数据…
条件队列是什么?可能很多人和我一样答不出来,不过今天终于搞清楚了! 什么是条件队列 条件队列:当某个线程调用了wait方法,或者通过Condition对象调用了await相关方法,线程就会进入阻塞状态,并加入到对应条件队列中. 在等待唤醒机制相关文章中我们提到了条件队列,即当对象获取到同步锁之后,如果调用了wait方法,当前线程会进入到条件队列中,并释放锁. synchronized(对象){ // 获取锁失败,线程会加入到同步队列中 while(条件不满足){ 对象.wait();// 调用w…
问题 怎样实现一个按优先级排序的队列? 并且在这个队列上面每次 pop 操作总是返回优先级最高的那个元素 解决方案 下面的类利用 heapq 模块实现了一个简单的优先级队列: import heapq class PriorityQueue: def __init__(self): self._queue = [] self._index = 0 def push(self, item, priority): heapq.heappush(self._queue, (-priority, sel…
对于每一个节点,我们只需要知道他上len次插入(len是这个队列的元素个数)时所插入的元素就可以了 那么只需要将所有插入建为一棵树,然后找len次祖先就可以了,这个用倍增维护即可 还有一种比较神奇的做法,详见loj讨论(是我太菜了吧) 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 1000005 4 #define ui unsigned int 5 ui V,P,n,p,x,y,ans,r[N],a[N],sh[N]…
rabbitMQ不支持数据库的持久化,只支持内存以及文件持久化 https://blog.csdn.net/bwh0520/article/details/78746873 http://blog.yuqiyu.com/spring-boot-chapter41.html activemq支持内存.文件.数据库的持久化…
PHP面试题作业 class DuiLie { private $array = array();//声明空数组 public function setFirst($item){ return array_unshift($this->array,$item);//头入列 } public function delFirst(){ return array_shift($this->array);//头出列 } public function setLast($item){ return ar…
#include<iostream> using namespace std; template <typename T> class Queue { public: Queue() { Node<T> *node=new Node<T>(); node->data=NULL; node->next=NULL; qfront=qrear=node; } template <typename T> struct Node { Node&…
1.什么是RabbitMQ.详见 http://www.rabbitmq.com/. 作用就是提高系统的并发性,将一些不需要及时响应客户端且占用较多资源的操作,放入队列,再由另外一个线程,去异步处理这些队列,可极大的提高系统的并发能力. 2.安装 A.如果没有Erlang运行环境,在安装过程中会提醒先安装Erlang环境.http://www.erlang.org/downloads 注意安装完成后必须配置环境变量: 计算机->属性->高级系统设置 ->环境变量 中的系统变量中新建一个变…
一:简介 RabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器. RabbitMQ的官方站:http://www.rabbitmq.com/      AMQP(高级消息队列协议) 是一个异步消息传递所使用的应用层协议规范,作为线路层协议,而不是API(例如JMS),AMQP 客户端能够无视消息的来源任意发送和接受信息.AMQP的原始用途只是为金融界提供一个…