区块链节点启动从main函数入口进入,

通过libinitializer模块初始化并启动各模块,

启动顺序如下:

通过启动顺序可以知道FISCO BCOS的一个重要特性——支持多群组账本,每个群组是一个独立的Ledger模块,每个Ledger具有独立的存储、同步、共识处理功能。

完成初始化工作同时,系统将会启动若干线程(或者进程、协程,原理类似),这些线程包括网络监听、共识、消息同步等,可以结合代码分析与系统命令查看运行节点配合确定有哪些关键线程,搞清楚关键线程的工作机制就可以基本掌握区块链系统运行机制。

以FISCO BCOS为例,节点启动之后的关键线程以及他们之间的关系如下:

初始化完成之后,

网络模块的Host线程将根据配置列表,主动与其他节点建立连接,并且持续监听来自其他节点的连接;

Sync线程开始相互发送区块高度,发现高度低于其他节点则开启下载逻辑;

RPC与Channel线程等待客户端发送请求,将收到的交易塞入txpool;

Sealer线程从txpool获取交易,

Consensus线程则开始处理共识消息包。

如此,整个区块链系统有条不紊地运转,完成客户端请求与分布式协作。

FISCO BCOS源码(2)启动顺序相关推荐

  1. golang源码分析-启动过程概述

    golang源码分析-启动过程概述 golang语言作为根据CSP模型实现的一种强类型的语言,本文主要就是通过简单的实例来分析一下golang语言的启动流程,为深入了解与学习做铺垫. golang代码 ...

  2. 渣渣菜鸡的 ElasticSearch 源码解析 —— 启动流程(上)

    关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/08/11/es-code02/ 前提 上篇文章写了 ElasticSearch 源码解析 -- ...

  3. springboot集成mybatis源码分析-启动加载mybatis过程(二)

    springboot集成mybatis源码分析-启动加载mybatis过程(二) 1.springboot项目最核心的就是自动加载配置,该功能则依赖的是一个注解@SpringBootApplicati ...

  4. 嵌入式之uboot源码分析-启动第二阶段学习笔记(下篇)

    接上部分---->嵌入式之uboot源码分析-启动第二阶段学习笔记(上篇) 注:如下内容来自朱老师物联网大讲堂uboot课件 3.2.14 CFG_NO_FLASH (1)虽然NandFlash ...

  5. APISIX源码解析-启动篇【ops.lua - start】

    APISIX源码解析-启动篇[ops.lua - start] 命令开始入口 ops.execute(env, arg) 命令参数校验 目前仅支持:help.version.init.init_etc ...

  6. 1对1直播源码刚启动时出现空白的解决方案

    做1对1直播源码启动的时候发现,点击icon之后会出现一个短暂的白屏的界面,再进入第一个activity,后来查了资料才发现,是因为Them的原因,默认背景是白色的所以解决方案就是给activiy加个 ...

  7. Android 8.1 源码_启动篇(一) -- 深入研究 init(转 Android 9.0 分析)

    前言 init进程,它是一个由内核启动的用户级进程,当Linux内核启动之后,运行的第一个进程是init,这个进程是一个守护进程,确切的说,它是Linux系统中用户控件的第一个进程,所以它的进程号是1 ...

  8. sofa源码学习----启动获取ServerConfig流程

    蚂蚁金服sofa rpc框架.公司想使用它作为架构的一部分,所以记录学习笔记. 1.从github下载源代码,版本为 5.6.0-SNAPSHOT,整个项目结构如下: 2.为了尽可能地只关注sofa ...

  9. Python源码学习:启动流程简析

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> Python简介: python主要是动态语言,虽然Python语言也有编译,生成中 ...

  10. Android4.0源码Launcher启动流程分析【android源码Launcher系列一】

    最近研究ICS4.0的Launcher,发现4.0和2.3有稍微点区别,但是区别不是特别大,所以我就先整理一下Launcher启动的大致流程. Launcher其实是贯彻于手机的整个系统的,时时刻刻都 ...

最新文章

  1. 3 html语言是什么,HTML语言剖析(3)
  2. Boreas: 一种基于token 的精确并且大规模检测代码克隆的方法
  3. linux c gcc编译报错 can not be used when making a shared object; recompile with -fPIC
  4. vector中find 的用法
  5. 减少静态链接库的体积
  6. 使用 dojo/query
  7. 更改vs2010帮助文档的位置
  8. K8S+Harbor+gluster+haproxy 实践加坑
  9. 局域网怎么查看单位摄像头_一行代码,实现多平台文件查看传输!
  10. BiLSTM-CRF模型中的CRF层讲解
  11. ReportView动态加载带参数的RDCL文件
  12. live2dmesh渲染优先级_Live2D 性能优化
  13. 无线投影之Miracast技术 收集
  14. [lammps教程]OVITO绘制原子应力云图
  15. 物联网单片机毕业设计实现
  16. 连接服务器失败请检查配置文件,连接服务器失败请检查网络
  17. 芭蕉树上第十三根芭蕉--opencv第一个测试程序遇到问题
  18. 《贝叶斯统计》最大后验密度可信集(HPD)Python实现
  19. 总结iOS游戏的设计、营销和盈利方式
  20. mysql查询行数count(*)、coun(1)、count(primary key)查询效率问题

热门文章

  1. docker 镜像备份magento 2.2.3
  2. ecplise里的run as里只有run configurations是怎么回事?
  3. NOIP2007 T1奖学金 解题报告-S.B.S.
  4. android原生browser分析(一)--Application
  5. UITableViewCell的选中时的颜色设置
  6. JSTL EL 详解
  7. mysql 数据生成_mysql生成数据
  8. (1)数据结构-绪论
  9. 文件图片随机划分训练集和验证集
  10. ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation