Introduction
libuv中的高效队列是用c语言, 只使用宏定义封装而成, 据说linux内核都是这个风格的, 因为我没有读过linux内核源码, 所以一开始理解这一段代码还是有些困难的.
libuv中使用的是双向循环队列, 实际上每个节点是两个 void*
指针, 分别保存 next
, prev
指针.
实现原理
libuv 的 queue 实现了 QUEUE_NEXT
, QUEUE_PREV
, QUEUE_PREV_NEXT
, QUEUE_NEXT_PREV
, QUEUE_DATA
, QUEUE_FOREACH
, QUEUE_EMPTY
, QUEUE_HEAD
, QUEUE_INIT
, QUEUE_ADD
, QUEUE_SPLIT
, QUEUE_INSERT_HEAD
, QUEUE_INSERT_TAIL
, QUEUE_REMOVE
几个方法
QUEUE_NEXT, QUEUE_PREV, QUEUE_PREV_NEXT, QUEUE_NEXT_PREV
首先来说一下上面这几个最基本的宏定义
#include <stddef.h>
typedef void *QUEUE[2];
/* Private macros. */
#define QUEUE_NEXT(q) (*(QUEUE **) &((*(q))[0]))