前述
只是对一部分源码内容进行记录 随缘
关键函数
GlobalInitializeOrDie
- 使用场景:
- server启动: Start() => StartInternal() => InitializeOnce() => GlobalInitializeOrDie()
- server添加服务: AddService() => AddServiceInternal() => InitializeOnce() => GlobalInitializeOrDie()
- channel初始化: Init() / InitSingle() => GlobalInitializeOrDie()
-
函数逻辑: 用pthread_once执行静态函数GlobalInitializeOrDieImpl进行初始化,保证只执行一次
- GlobalInitializeOrDieImpl内容:
- 屏蔽SIGPIPE
- 设置GLOG
- 初始化openssl库
- 设定一些公用内容 如端口、HTTP相关状态方法等
- 注册支持的命名空间 如http、https、redis、file、list等
- 注册支持的负载均衡算法 如random、rr、murmurhash等
- 注册支持的压缩方法 如gzip、zlib、snappy等
- 注册支持的协议 如baidu_std、http、h2、redis、rtmp等
- 如果是作为客户端调用,需要创建客户端InputMessenger添加协议对应的Handler
- 注册并发控制器,用于限制并发数——有ConstantConcurrencyLimiter和AutoConcurrencyLimiter两种
- UserCodeBackupPool初始化
- 起一个bthread调用GlobalUpdate函数,内部定时更新信息,此线程不会被join,随主进程一起退出
PREVIOUSc++偏特化模板实现
NEXTc++模拟实现defer