libuv源码剖析(一): 高效队列 Queue

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]))
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值