β

RabbitMQ之priority_queue

Roowe❤ 382 阅读

整体hold不住RabbitMQ,所以开始一一看基本的数据结构的设计。

erlang自带的只有队列,实现是用两个list,以前没考虑过用链表实现队列,看了实现,确实挺不错,复杂度是n。以前用c的时候做题,需要队列的时候,就申请个100W的数组,记录下HEAD,然后LastIndex,取完一个HEAD,就++,插入就arr[LastIndex++]=v。

RabbitMQ的gen_server2消息是做了cache,然后消息是按照优先级来选取处理的,所以需要一个优先队列的基础数据结构,他们就参考queue.erl的实现,自己搞了个,而且还维护了len,所以普通队列也可以用这个,某些操作的效率比自带的高,比如len。

priority_queue的实现和我们命令式语言有点不一样,复杂度各方面会对堆实现的高,但基本够用就算了。详情就看代码把,也不是很长。完整的数据结构是{pqueue, [{priority, queue}…]},queue就是{queue, [], [], 0},复合起来搞。

作者:Roowe❤
33.3% Linux 33.3% Mathematics 33.3% Inspiration
原文地址:RabbitMQ之priority_queue, 感谢原作者分享。

发表评论