Skynet源码之:监视器(10)
monitor初始化 1,首先让我们看看监视器monitor在那里调用
监视器monitor不像 服务管理handle_storage,消息队列message_queue,模块加载modules 等具有复杂的结构,它的功能和流程比较简单。因此没有特别的函数用于监视器monitor的初始化。像服务管理有skynet_handle_init(),消息队列有skynet_mq_init(),模块加载有skynet_module_init(),定时器模块也有属于自己的skynet_timer_init(),网络模块则有skynet_socket_init()
因此监视器monitor的初始化,就发生在被第一次调用时才进行。在skynet_start.c文件,第 186 行
// config->thread 又是通过skynet_main.c 中读取启动配置获得的 // thread == config->thread // 因此 thread 就是启动配置的数值 struct monitor *m = skynet_malloc(sizeof(*m)); // 申请内存 memset(m, 0, sizeof(*m)); // 把内存都置为0 m->count = thread; // 把开启的worker线程数记录在count m->sleep = 0; // 初始值为0 m->m = skynet_malloc(thread * sizeof(struct skynet_monitor *)); // 很显然,老做法了 // 申请一段内存,实际就是一个数组,数组大小为需要监控的线程数量 // 数组的元素是什么呢?是指针 // 指针的类型是什么呢?指向 struct skynet_monitor 结构体的地址 int i; for (i=0;i<thread;i++) { m->m[i] = skynet_monitor_new(); // 最后为每个数组分配一个 指向struct skynet_monitor 结构体的指针 } 让我们来看看struct monitor结构体是什么?
2023-09-14
阅 读 全 文