公司产品用了一个开源的框架,最近出了点问题,细看了这个框架。

SpProcPool:  https://github.com/spsoft/spprocpool.git

我们的线程池用的是传递文件描述符这套,这里主要记录主如何把收到的sockfd丢给子处理的。

主启动 : SP_ProcInetServer::start()

SP_ProcInetServer::start()里构造了SP_ProcManager procManager,执行procManager.start()。start方法里做了很多事,建了一个全双工管道(用来传递WorkerProecss 创建的全双工管道一端) pipeFd[ 2 ] = {USED_BY_PARENT, USED_BY_CHILD},后fork进程,父拿到USED_BY_PARENT pipeFd[0](写,给父传WorkerProecss 的读端),构造进程池信息,子ChildProcess一直(loop)做pipeFd[0]的对端pipeFd[1](读)的读recv_fd ,读出的实际是WorkerProecss 创建时,通过pipeFd[0]传过来的实际的WorkerProecss 待读端,调用worker->process去读真实上来的socketFd,worker拿到socketFd,取数据做具体的业务处理。

SP_ProcInetServer::start()之后就是从进程池里拿进程WorkerProecss来处理accept上来的socketFd,具体的处理就是发送出去SP_ProcPduUtils::send_fd( workerProcessPipeFd[0], clientFd ), 上说到的ChildProcess会在loop中从workerProcessPipeFd[1]中拿到实际的socketFd,然后进行业务处理。

PS:

a)主进程:1个,主要工作是创建Manager进程,从Manager进程池中取进程(实际是进程之间通信的管道信息)来处理accept 上来的socketFd(实际就是把收到的socketFd发出去,让WorkProcess来处理)。

b) Manager进程: 1个,构造全双工管道,一端给主进程写(写workProcessInfo创建时的创建的全双工管道一端),另一端自己用来读写入的内容(Manager进程是主fork出的子)

c) Worker进程:N个,进程池中无可用,创建 进程管道信息,管道信息一端通过pipeFd[0]发(主进程中),触发Manager进程中创建Worker进程,创建之后,长读、等实际要上送的socketFd

d) 主、Manager、Worker之间的关系:   主-fork->  Manager-fork->  Worker-fork

e)关于send_fd,recv_fd:

[03-04 01:09:00][spprocpdu.cpp_144][PID_651][信息中心][DEBUG] send_fd: [5] [6].
[03-04 01:09:04][spprocpdu.cpp_144][PID_651][信息中心][DEBUG] send_fd: [7] [6].
[03-04 01:09:05][spprocpdu.cpp_144][PID_651][信息中心][DEBUG] send_fd: [7] [6].

[03-04 01:09:00][spprocpdu.cpp_137][PID_658][信息中心][DEBUG] recv_fd :[6] [5].  -- 这里为什么收到的不是[6][6],纠结了下,参考文件描述符理解
[03-04 01:09:04][spprocpdu.cpp_137][PID_659][信息中心][DEBUG] recv_fd :[5] [7].  -- 这里为什么收到的不是[5][6],参考文件描述符理解
[03-04 01:09:05][spprocpdu.cpp_137][PID_659][信息中心][DEBUG] recv_fd :[5] [7].

套接字是一个特殊的文件描述符。以前理解有误。参考:https://blog.csdn.net/cywosp/article/details/38965239 这个来理解文件描述符

其它,当前只看了SpProcPool 传文件描述符这块,还有其它的方式,有空看下。

SpProcPool阅读笔记--1的更多相关文章

  1. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  2. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

  3. 《uml大战需求分析》阅读笔记05

    <uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...

  4. <<UML大战需求分析>>阅读笔记(2)

    <<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...

  5. uml大战需求分析阅读笔记01

    <<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...

  6. Hadoop阅读笔记(七)——代理模式

    关于Hadoop已经小记了六篇,<Hadoop实战>也已经翻完7章.仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序.单表链接等,想得其精髓,还需深入内部. 按照<Ha ...

  7. Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable

    酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑 ...

  8. Hadoop阅读笔记(五)——重返Hadoop目录结构

    常言道:男人是视觉动物.我觉得不完全对,我的理解是范围再扩大点,不管男人女人都是视觉动物.某些场合(比如面试.初次见面等),别人没有那么多的闲暇时间听你诉说过往以塑立一个关于你的完整模型.所以,第一眼 ...

  9. Hadoop阅读笔记(四)——一幅图看透MapReduce机制

    时至今日,已然看到第十章,似乎越是焦躁什么时候能翻完这本圣经的时候也让自己变得更加浮躁,想想后面还有一半的行程没走,我觉得这样“有口无心”的学习方式是不奏效的,或者是收效甚微的.如果有幸能有大牛路过, ...

随机推荐

  1. Windows 10不能正常打开开始菜单问题修复

    1.可以尝试通过命令重新注注册Windows Store app: powershell -ExecutionPolicy Unrestricted Add-AppxPackage -DisableD ...

  2. Internal Temporary Tables

    8.4.4 How MySQL Uses Internal Temporary Tables 这是MySQL手册中的一节,尝试补充了一些解释.用的版本是MySQL5.6.15社区版 In some c ...

  3. COCOS2D-X暂时设置竖屏,过一阵子再设置回横屏

    mainActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏 竖屏是JAVA代码 另外再改动C ...

  4. hdu - 3498 - whosyourdaddy(反复覆盖DLX)

    题意:N(2 ≤ N ≤ 55)个点,M(0 ≤ M ≤ N*N)条无向边,删除一个点会把与其相邻的点一起删掉.问最少删几次能够删掉全部点. 题目链接:pid=3498">http:/ ...

  5. HDU 5380 Travel with candy 单调队列

    pid=5380">链接 题解链接:http://www.cygmasot.com/index.php/2015/08/16/hdu_5380 题意: n C 一条数轴上有n+1个加油 ...

  6. HDU1269 有向图强连通分量

    题目大意:问一个有向图是否任意两点在两个方向上互相连通. 有向图强连通分量定义:如果一个图中的任意两点在两个方向上都互相连通,则该图为强连通图.极大强连通图为有向图的强连通分量(注意是极大,不是最大. ...

  7. oc4--方法

    // main.m // 第一个OC类-方法2 #import <Foundation/Foundation.h> // 1.编写类的声明 @interface Iphone : NSOb ...

  8. 对象设计解耦的方法IOC和DI

    耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间,以及软件系统和硬件系统之间.如何降低系统之间.模块之间和对象之间的耦合度,是软件工程永远追求的目标之一.为了解决对象之间的耦合度过高 ...

  9. 写个js动态调整图片宽高 (原创)

    <body style="TEXT-ALIGN: center;"> <div id="testID" style="backgro ...

  10. QS之vsim

    vsim - The vsim command invokes the VSIM simulator -L <library_name> … (optional) Specifies th ...