pm2源码浅析

大转转FE 大转转FE     2022-09-09     367

关键词:

PM2工作原理

 

 

最近在玩一个游戏,《地平线:黎明时分》,最终Boss是一名叫黑底斯的人,所谓为人,也许不对,黑底斯是一段强大的毁灭进程,破坏了盖娅主进程,从而引发的整个大陆机械兽劣化故事。

为什么要讲这么一段呢,是希望大家可以更好地理解pm2的原理,要理解pm2就要理解god和santan的关系,god和santan的关系就相当于盖娅和黑底斯在pm2中的01世界中,每一行代码每一个字节都安静的工作god就是Daemon进程 守护进程,重启进程,守护node程序世界的安宁,santan就是进程的毁灭者,异常进程的退出,杀死进程,毁灭进程等工作,都是由这位大哥操手。

 

架构图如下:

 

god和santan通讯的方式,就是RPC

 

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

执行流程图如下:

 

 

PM2源码浅析

 

clinet启动关联daemon主进程

 

God的监听进程方法

god启动后,与satan建立rpc链接,调用prepare方法来完成集群启动

 

satan通知god

 

 

总结

pm2的集群,从原理是采用cluster.fork来实现的,深入理解cluser模块,精度pm2的源代码,能更好的理解pm2,更好的理解node设计思想

 

如果你喜欢我们的文章,关注我们的公众号和我们互动吧。

flinkflink1.12.2源码浅析:streamtask浅析(代码片段)

1.概述转载:Flink1.12.2源码浅析:StreamTask浅析在Task类的doRun方法中,首先会构建一个运行环境变量RuntimeEnvironment.然后会调用loadAndInstantiateInvokable方法来加载&实例化task的可执行代码.可以看一下loadAndInstantiateInvokable方法会根据... 查看详情

flinkflink1.12.2源码浅析:task浅析(代码片段)

1.概述转载:Flink1.12.2源码浅析:Task浅析Task表示TaskManager上并行subtask的一次执行。Task封装了一个Flinkoperator(也可能是一个用户function)并运行它,提供使用输入数据、生成结果(中间结果分区)和与JobManager... 查看详情

view绘制源码浅析(一)布局的加载(代码片段)

...很难吃透。近期我专门抽了一周多的时间读了绘制相关的源码,这里准备用三篇博客做一个系统的讲述,目录如下。View绘制源码浅析(一)布局的加载View绘制源码浅析(二)布局的测量、布局、绘制View绘制源码浅... 查看详情

layout布局源码浅析之——framelayout

一直想研究下安卓各种布局控件,FrameLayout是安卓最简单的界面布局,所以就从FrameLayout讲起。1.属性。frameLayout继承ViewGroup,除了拥有ViewGroup的属性之外,只有一个layout_gravity属性。看它的内部静态类LayoutParams: 1publicstaticclas... 查看详情

hashmap源码浅析(代码片段)

HashMap源码主要一些属性//默认的初始化容量(2的n次方)staticfinalintdefault_inital_capacity=16; //最大指定容量为2的30次方staticfinalintmaximum_capacity=1<<30;//默认的加载因子staticfinalfloatdefault_load_factor=0.75f;//hashmap的底层 查看详情

浅析jdk中serviceloader的源码(代码片段)

前提紧接着上一篇《通过源码浅析JDK中的资源加载》,ServiceLoader是SPI(ServiceProviderInterface)中的服务类加载的核心类,也就是,这篇文章先介绍ServiceLoader的使用方式,再分析它的源码。ServiceLoader的使用这里先列举一个经典的例子... 查看详情

androidhandler源码浅析(代码片段)

...易就丢分了,所以本文将会简单带大家了解一下Hander源码的实现。因为是浅析,所以有些东西不会讲的太细,但是会带大家把源码走通。上代码publicclassHandlerActivitye 查看详情

mybatis源码浅析

前言最近准备看一看mybatis的源码,虽说使用了很久,但是里面的一些细节还是不算很了解,今天整理一个简单的文档。我们首先需要理解一件事,mybatis的底层使用的还是jdbc,所以如果对jdbc很熟悉的话,源码看起来就会很轻松... 查看详情

spring源码浅析之bean实例的创建过程

@TOC在上一篇内容中,介绍了doGetBean方法的源码内容,知道了bean在创建的过程中,有三个范围,单例、多例、Scope,里面都使用到了createBean。下面本篇文章的主要内容,就是围绕createBean来进行展开。createBean方法/***Createabeaninstance... 查看详情

rxjava源码浅析(代码片段)

Create创建一个Observable比较简单,最基础的方法是调用Observable的create方法进行创建,贴一下示例:Observable.create(newObservable.OnSubscribe<Integer>()@Overridepublicvoidcall(Subscriber<?superInteger 查看详情

jmeter5.0核心源码浅析(代码片段)

【转自:https://blog.csdn.net/zuozewei/article/details/85042829】源码下载地址:https://github.com/apache/jmeter废话不多说,下面进入正题~一、源码结构1.工程目录 2.源码目录  3.源码分析运行机制  HashTree是JMeter执行测试依赖的... 查看详情

leakcanary核心原理源码浅析

网上大牛太多,不敢说分析,也不敢装成大大,所以只能是浅析…那么今天这篇主要解决什么问题呢?其实就一个问题,LeakCanay.install(this)这个函数到底是怎么走的,用测试的话说就是数据流是怎么走的,用探索性测试的方法说... 查看详情

flinkflink1.12.2源码浅析:taskexecutor(代码片段)

1.概述转载:Flink1.12.2源码浅析:TaskExecutorTaskExecutor是TaskManger的具体实现.二.TaskExecutorGatewayTaskExecutor是TaskManager的具体实现,首先看网关都实现了什么逻辑.清单如下2.1.类图2.2.接口清单名称描述CompletableFuturerequestSlot(SlotIDslotId, 查看详情

源码浅析-listviewanimations

1.前言ListViewAnimations开源库可以让Android开发者根据项目实际需求,很方便为ListView(严格来说AbsListView更准确些,因为还包含GridView。但为了方便统称ListView,下同)添加动画效果。ListViewAnimations提供Alpha,Swing-RightIn&#x... 查看详情

scp源码浅析

...小任务,完成工作又能满足好奇心,何乐而不为!我只从源码浅浅的分析一下,后续有更多想法再补充 源码赏析:1、所有的故事都从main开始,也从main结束。(main也很无辜,它只是打开了计算机的一扇窗):  作为一个... 查看详情

mybatis源码浅析

什么是MyBatisMyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis避免了几乎所有的JDBC代码和手工设置参数以及抽取结果集。MyBatis使用简单的XML或注解来配置和映射基本体,将接口和Java的POJOs(PlainOldJavaObject... 查看详情

mybatis源码浅析

什么是MyBatisMyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis避免了几乎所有的JDBC代码和手工设置参数以及抽取结果集。MyBatis使用简单的XML或注解来配置和映射基本体,将接口和Java的POJOs(PlainOldJavaObject... 查看详情

jquery源码浅析

...ipt无疑可以称为世界上最飘逸的语言,最近看了下jQuery的源码,实现了一个简陋的jQuery。我觉得要看懂jQuery整体结构,需要搞懂js作用域链,闭包,jsprototype继承,关于闭包网络上的定义实在太多了,这里参照了js权威指南里的定... 查看详情