DC4C代码阅读(5)——计算节点
2016-02-20 16:19
288 查看
码结构和注册节点类似
计算节点的主要流程:
1、在main函数中设置信号处理函数、把自己转换为守护进程、创建子进程组(一台主机中可以有多个计算节点),父进程负责监控子进程的运行,子进程组则提供了具体的服务
2、在子进程中,创建并初始化监听套接字,非阻塞的连接注册节点,然后进行循环开始等待事件的发生
3、在每次循环中,第一步是连接注册服务器,这样做是有原因的,由于网络等原因,注册节点发送给计算节点心跳包有可能丢失,如果连续丢失达到指定次数,注册节点就会断开计算节点的连接,为了防止这种情况产生,每次循环的时候都检验自己和注册节点是否仍然连接,如果断开了,那么重链
4、在处理的过程中我们要区分几种不同的套接字:
(1)listen套接字,用于监听等到用户节点的到来
(2)connect套接字,连接到注册节点的套接字
(3)accpet套接字,任意一个时刻,一个计算节点都只能有一个用户节点在使用,正在使用的这个用户的套接字就是accpet套接字,其他连接到计算节点,但是不能做任何事的套接字叫做野生套接字
(4)executing套接字,计算节点执行用户的任务时是创建一个新进程去执行,这个新创建的进程和计算节点之间的通信是通过管道进行的,即executing套接字
(5)野生套接字,某些用户节点连接到计算节点,但是此时计算节点正在执行任务,于是这个套接字什么事情都不能干,这样的套接字叫做野生套接字
5、等待所有的套接字的事件的发生
(1)listen套接字
1)读事件。表示有用户节点连接进来。
2)其他事件。表示出错,结束循环,退出进程。
(2)connect套接字
1)读事件。表示注册节点发送信息过来。处理读事件,例如心跳包,状态查询等等
2)写事件。
(3)accept套接字
1)读事件。表示用户节点发送过来的请求。一般是执行程序的请求,下面针对执行程序的请求说明一下它的流程。
a)校验本地程序的md5和用户节点发送过来的md5是否匹配
b)如果md5不匹配,那么将会要求用户节点重新部署程序。
c)md5匹配,创建一个子进程,并创建管道,开始执行用户程序,管道描述符添加到套接字集合中并使用epoll等待它的事件。
d)程序执行结束会向管道发送信息,因此epoll套接字会监听到事件的发生,并根据此判断程序是否运行结束。
2)写事件。
(4)executing套接字
1)读事件。运行用户节点任务的子进程发送的消息事件,可能是执行完毕,或者出错。
2)其他事件。表示出错
(5)野生套接字
1)不处理任何事件。
(6)处理心跳包。
6、离开循环
计算节点的主要流程:
1、在main函数中设置信号处理函数、把自己转换为守护进程、创建子进程组(一台主机中可以有多个计算节点),父进程负责监控子进程的运行,子进程组则提供了具体的服务
2、在子进程中,创建并初始化监听套接字,非阻塞的连接注册节点,然后进行循环开始等待事件的发生
3、在每次循环中,第一步是连接注册服务器,这样做是有原因的,由于网络等原因,注册节点发送给计算节点心跳包有可能丢失,如果连续丢失达到指定次数,注册节点就会断开计算节点的连接,为了防止这种情况产生,每次循环的时候都检验自己和注册节点是否仍然连接,如果断开了,那么重链
4、在处理的过程中我们要区分几种不同的套接字:
(1)listen套接字,用于监听等到用户节点的到来
(2)connect套接字,连接到注册节点的套接字
(3)accpet套接字,任意一个时刻,一个计算节点都只能有一个用户节点在使用,正在使用的这个用户的套接字就是accpet套接字,其他连接到计算节点,但是不能做任何事的套接字叫做野生套接字
(4)executing套接字,计算节点执行用户的任务时是创建一个新进程去执行,这个新创建的进程和计算节点之间的通信是通过管道进行的,即executing套接字
(5)野生套接字,某些用户节点连接到计算节点,但是此时计算节点正在执行任务,于是这个套接字什么事情都不能干,这样的套接字叫做野生套接字
5、等待所有的套接字的事件的发生
(1)listen套接字
1)读事件。表示有用户节点连接进来。
2)其他事件。表示出错,结束循环,退出进程。
(2)connect套接字
1)读事件。表示注册节点发送信息过来。处理读事件,例如心跳包,状态查询等等
2)写事件。
(3)accept套接字
1)读事件。表示用户节点发送过来的请求。一般是执行程序的请求,下面针对执行程序的请求说明一下它的流程。
a)校验本地程序的md5和用户节点发送过来的md5是否匹配
b)如果md5不匹配,那么将会要求用户节点重新部署程序。
c)md5匹配,创建一个子进程,并创建管道,开始执行用户程序,管道描述符添加到套接字集合中并使用epoll等待它的事件。
d)程序执行结束会向管道发送信息,因此epoll套接字会监听到事件的发生,并根据此判断程序是否运行结束。
2)写事件。
(4)executing套接字
1)读事件。运行用户节点任务的子进程发送的消息事件,可能是执行完毕,或者出错。
2)其他事件。表示出错
(5)野生套接字
1)不处理任何事件。
(6)处理心跳包。
6、离开循环
相关文章推荐
- 蓝桥杯 历届试题 打印十字图 java详解
- PHP绘图函数生成图片验证码
- PHP首部认证
- VLFeat-使用matlab版本计算HOG
- C# Random 生成不重复随机数
- 从零进入github
- PHP Sessions
- Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例
- c++中的栈和队列
- 代码大全第15章,使用条件语句
- eclipse常用快捷键
- Spark - ERROR Executor: Exception in tjava.lang.OutOfMemoryError: unable to create new native thread
- Mac上如何安装gradle以及eclipse上如何搭建gradle
- Java发送get及post请求工具方法
- Java认证考试实例疑难辨析(11)
- Spring 资源访问剖析和策略模式应用
- 夯实JAVA基本之一——泛型详解(2):高级进阶
- php最简单的方法通过url下载图片。
- Servlet JNICALL Java_calcServlet_calc
- 夯实JAVA基本之一 —— 泛型详解(1):基本使用