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]))

本文深入剖析libuv库中的高效队列实现,重点讲解了QUEUE_NEXT, QUEUE_PREV等宏定义的工作原理,以及如何通过指针偏移存储用户数据。文中还给出了实例代码以帮助理解libuv队列的使用。"
81168545,4956755,Linux后台与定时运行服务详解,"['Linux', '运维', '后台运行', '定时任务']
739

被折叠的 条评论
为什么被折叠?



