启动流程(盗图一用)
原文:http://blog.also777.com/2018/05/05/bind-source-code-analysis-1/设计模式
有一张现成好图来描述BIND的半同步半异步设计模式:
类似的项目本人之前尝试过:node.js 调度式离线任务处理,用的也是master接受外部消息,然后砸进task queue中,各个worker线程(进程或其他机器)来找master注册一个位置,接着master按照配置,均衡地调度任务给各个worker,然后worker回调结果给master。而BIND看起来可能是worker去捞任务的方式,有待后续源码阅读继续理解。
针对DNS服务端的IO密集型场景,BIND选用了Reactor模式(事件驱动),类似于nginx,nodejs的模型,但nodejs用的是全异步的方式,BIND用的是半同步半异步,代码结构相对简单且清晰很多。
但nodejs近年来已经出现的await/async语法,模仿C#的流程控制,其实已经使得nodejs的代码结构变得十分清晰,不需要函数式不需要callbackhell也能实现异步非阻塞。
入口
#/bin/named/main.c
/* main entry point, possibly hooked */
int
main(int argc, char *argv[]) {
.......
}
随便修改点啥,在读配置的流程里加一行日志输出:
image.png
然后回到项目目录编译:
make
sudo make install
bin/named/named -g
就发现代码改成功辣:
image.png
参考:
BIND源代码浅析(一)基本框架
网友评论