我快速浏览了the source ...中的uv_walk
void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg) {
QUEUE queue;
QUEUE* q;
uv_handle_t* h;
QUEUE_MOVE(&loop->handle_queue, &queue);
...
}
QUEUE
,QUEUE_MOVE
等似乎是完全通过宏定义的queue.h
中队列的实现。在libuv IRC上,有人建议它可能遵循BSD queue.h
,但它看起来完全不同(尽管也许一个启发了另一个)。
我的猜测是,这是一种常见的C方法,出于性能方面的考虑(避免对小函数进行长时间调用),或作为一种获取“通用”数据结构不绑定到任何类型的战术方法。我确定我不熟悉动态的“真实世界C”,而且我很好奇。
谢谢!