skynet源码分析(12)--skynet中的启动过程

作者:shihuaping0918@163.com,转载请注明作者

这一篇是核心底层代码分析的最后一篇,前面11篇已经基本把底层代码分析完了。剩下的内容是多线程,锁,内存分配等系统相关的内容,也没什么可分析的。因为这些都很直观,很简明。基本上都是系统调用封装了一下。

本篇要分析的是skynet整个启动过程,包括配置读取,各个线程的创建,服务初始化,服务的启动,服务注册,服务的名字,消息队列,消息处理回调注册。算是一个总结性的分析,所以不会贴大量代码。主要是以流程的方式来讲解整个启动过程做了什么。

1.main函数
main函数是skynet进程的入口点,它需要一个配置文件的路径作为参数。main函数先做一些内存分配工作,然后加载配置文件里的内容。再把配置文件里的内容设置到lua环境变量_ENV。然后从_ENV里读取配置到c配置中。最后调用skynet_start。

2.skynet_start函数
skynet_start函数根据配置确定服务是不是以后台方式启动,然后初始化timer/socket/module/mq这些数据结构,给它们分配内存,填充一些必要的字段。下一步创建和注册日志logger服务,这个logger服务是C层实现的。然后创建注册snax服务,做bootstrap操作。最后调用start函数。

3.start函数
这个函数会启动timer/socket/monitor/worker线程,timer/socket/monitor线程都只有一个,唯独worker线程是多个,在配置文件中以thread=num来配置的。如果配置文件中没有配,就是8个。第个worker线程都有自己的权重值,权重值越大的,给单个服务的时间片越小。

线程都启动完以后,就进入pthread_join,等待线程的终止。所有线程终止以后,skynet就会退出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,854评论 18 139
  • 引言: 一直都是从事客户端的开发工作,最近抽了点时间想了解一下服务器开发的相关知识,一番博客瞎逛之后,发现了一个不...
    linshuhe1阅读 5,333评论 0 10
  • 6.2刘润商学院日课感悟:组织模式 无论是组织也好还是企业也好,如果想用最好的方式运行下去,必然需要一定的规则或...
    徐猛_Merlin阅读 202评论 0 1
  • 昨日迷乱的烟火 在一瞬间光芒闪耀 却引来千万人中的一次次瞩目 如今的残落的古城 唯有那满城盛开的牡丹 经历了千年的...
    向史而新阅读 237评论 0 3
  • 1. 为什么单身? 没有钱。 2.为什么还单身? 有钱了。 3.为什么不合群?
    霓虹的一只喵阅读 410评论 0 0