李恒道 发表于 2023-2-3 14:25:04

Node handle_queue学习

在node的uv_loop_s和uv_handle_t中都存在一个handle_queue
handle标识一个长久存在的服务
在创建的时候会执行uv__handle_init
主要代码如下
```c
#define uv__handle_init(loop_, h, type_)
    do {                           
      (h)->loop = (loop_);      
      (h)->type = (type_);      
      (h)->flags = UV_HANDLE_REF;               
      QUEUE_INSERT_TAIL(&(loop_)->handle_queue, &(h)->handle_queue);
      (h)->next_closing = NULL
    }                              
    while (0)
```
设置了loop,type,flags等,然后调用QUEUE_INSERT_TAIL
QUEUE_INSERT_TAIL是一个宏函数
我们知道handle还是loop都有一个handle_queue,数组长度为2
其中下标0为下一个对象
下标1为上一个对象
调用QUEUE_INSERT_TAIL
会将最后一个handle的next指向新的handle
将新的handle的next指向loop的结构体
然后设置上一个prev,将结构体的prev指向新插入的handle
将新的handle的prev指向之前最后一个handle
本质就是一个C的双向指针链表

王一之 发表于 2023-2-3 16:34:24

厉害了 c佬

李恒道 发表于 2023-2-3 16:57:01

王一之 发表于 2023-2-3 16:34
厉害了 c佬

仔细想想也是很神奇...
我找不到c++工作才做前端的
前端写久了竟然又回c了...
页: [1]
查看完整版本: Node handle_queue学习