首页
学习
活动
专区
工具
TVP
发布

纸上得来终觉浅

专栏作者
38
文章
41209
阅读量
20
订阅数
libuv源码阅读(23)--tcp-echo-server
listen完了之后run loop等待socket可读,新连接到来,执行指定回调
wanyicheng
2021-03-14
1.1K0
libuv源码阅读(22)--spawn
总结:父进程fork出子进程去执行指定的文件或者应用,双方根据参数设置的共享fd来通信,这个示例比较简单,父进程只需要等待结束捕获信号就可以了。
wanyicheng
2021-03-14
2.5K0
libuv源码阅读(20)--uvcat
先看用例源码: #include <assert.h> #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <uv.h> void on_read(uv_fs_t *req); // 几个req请求 uv_fs_t open_req; uv_fs_t read_req; uv_fs_t write_req; // 读写的缓冲区都是这个 static char buffer[1024]; static uv_buf_t
wanyicheng
2021-03-13
5480
libuv源码阅读(19)--vustop
先看用例源码: #include <stdio.h> #include <uv.h> int64_t counter = 0; void idle_cb(uv_idle_t *handle) { printf("Idle callback\n"); counter++; // 计数停止 if (counter >= 5) { uv_stop(uv_default_loop()); printf("uv_stop() called\
wanyicheng
2021-03-13
3270
libuv源码阅读(18)--progress
总结:用户自己初始化的async handler 也可以被插入到异步handler队列中,当管道[0]可读的时候,代表某个异步handler可以处理了,这时候遍历队列,处理pengding状态的handler。
wanyicheng
2021-03-13
4830
libuv源码阅读(17)--queue-cancel
总结:cancel把会work从待处理的队列中移动到loop的wq就绪队列中,然后让loop的异步任务handler来处理它
wanyicheng
2021-03-13
3970
libuv源码阅读(16)--signal
总结:信号处理handler是被插入到红黑树中,按照一定规则排序插入的,信号越小,不带oneshot等规则。信号处理函数统一触发信号管道可读,然后loop从信号io管道可读端读取信号结构体,执行这个信号上的handler的回调。大概主体流程就是这样的。跟我们平常自己写某些信号的handler的方法类似:注册信号和信号函数,触发信号管道可读,主循环捕获io可读事件,根据信号值调用对应回调。
wanyicheng
2021-03-13
2.1K1
libuv源码阅读(15)--ref-timer
主要包含 timercb 和用于最小时间堆节点字段heap_node等;它由一个基础hanlder类型和自身独有的属性构成
wanyicheng
2021-03-13
5390
libuv源码阅读(14)--queue-work
其实就是调用 uv__work_submit 提交一个任务给任务队列,跟loop的io事件多线程异步化一样的处理逻辑,这里2个cb分别对应work和done函数,逻辑执行几乎一致,就不再展开分析了。
wanyicheng
2021-03-13
6170
libuv源码阅读(13)--plugin
功能很简单:载入启动参数中对应的插件动态库,调用它们的 initialize 方法
wanyicheng
2021-03-13
3960
libuv源码阅读(12)--change
可以看到 fs_event_s 也是由基础的handler和一个path 以及 它独有的字段组成
wanyicheng
2021-03-12
6310
libuv源码阅读(11)--lock
2. 创建2个读者 1个写者 根据读写锁 被系统调度分配执行时机 输出对应自己的读到或者写后的值
wanyicheng
2021-03-12
4320
libuv源码阅读(10)-thread-create
根据参数设置新线程的堆栈大小,然后调用系统接口创建对应的线程,然后释放线程属性变量
wanyicheng
2021-03-12
5600
libuv源码阅读(9)--interfaces
简单来说就是调用linux系统的:getifaddrs 和 freeifaddrs,读取系统的网卡接口信息,然后拷贝到用户的缓冲区中,然后再释放函数内部的内存。逻辑比较简单,就不仔细研究网卡接口信息的结构体了。
wanyicheng
2021-03-12
4840
libuv源码阅读(7)--idle-basic
1. init初始化一个 idle handler, start目标handler ,同时绑定执行函数 wait_for_a_while;
wanyicheng
2021-03-12
3440
libuv源码阅读(6)--helloworld
每一种都是一种hanlder类型或者request类型,代表某种资源类型或者请求操作的包装结构体,里面的属性字段是为了支持它可以正常工作的而设置的:
wanyicheng
2021-03-12
6610
libuv源码阅读(5.2)--tree.h之红黑树
总结: 红黑树是libuv中用来管理信号handler的,实现的独立性比较高,可以用于自己以后项目参考。
wanyicheng
2021-03-10
5270
libuv源码阅读(5.1)--tree.h之伸展树
点这里 https://juejin.cn/post/6892567524118888462
wanyicheng
2021-03-06
4320
libuv源码阅读(2)--queue.h
这是一种双向队列的实现,假设现在有2个strcut BASE 和 A 要通过双向队列组织起来,BASE作为队列头结点的持有者,A作为队列元素插入:
wanyicheng
2021-03-06
4130
libuv源码阅读(1)--安装与使用
安装过程中可能会提示缺少库,请对应apt-get install 对应提示(autoconf automake libtool等)缺少的库名。
wanyicheng
2021-03-06
8790
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档