postmaster.c 中,主循环的大致流程如下:
/*                                    * Main idle loop of postmaster                                    */
static int
ServerLoop(void)
{
    ......                       nSockets = initMasks(&readmask);                                for (;;)                                {
        ...                                        if (pmState == PM_WAIT_DEAD_END)                            {...        }                            else                            {
            ...                                                     selres = select(nSockets, &rmask, NULL, NULL, &timeout);   }
        ...                           /* Now check the select() result */                            if (selres < 0)                            {                            if (errno != EINTR && errno != EWOULDBLOCK)                        {
                ......           return STATUS_ERROR;                    }                        }                            /*                            * New connection pending on any of our sockets? If so, fork a child * process to deal with it.                            */                            if (selres > 0)                            {                            int            i;            for (i = 0; i < MAXLISTEN; i++)                        {                        if (ListenSocket[i] == PGINVALID_SOCKET)                    break;                if (FD_ISSET(ListenSocket[i], &rmask))                    {                    Port       *port; port = ConnCreate(ListenSocket[i]);                if (port)                {                BackendStartup(port);   /*To fork a new backend */
      StreamClose(port->sock);            ConnFree(port);            }                }                    }                        }                                    ......                        }
}                                    

从上面可以看出,基本上是以 C语言的标准select函数 来监听是否有新的连接请求进来。如果有连接请求则调用BackendStartup 函数,开启新的backend 处理连接。

这里面比较令我困惑的是:for (i = 0; i < MAXLISTEN; i++) 循环,对BackendStartup 函数的调用是发生在循环内部。ListenSocket 数组如何理解。需要进一步的研究。

Postmaster主循环的大致流程相关推荐

  1. cocos2d-x游戏开发(四)游戏主循环

    欢迎转载:http://blog.csdn.net/fylz1125/article/details/8518737 终于抽时间把这个游戏写完了.由于没有自拍神器,所以把它移植到了Android上,用 ...

  2. U-boot主循环main_loop分析

    2019独角兽企业重金招聘Python工程师标准>>> 原文在我博客:http://blog.csdn.net/andy_wsj/article/details/8614905 最近 ...

  3. master线程的主循环,后台循环,刷新循环,暂停循环

    InnoDB存储引擎的主要工作都是在一个单独的后台线程master thread中完成的.master thread的线程优先级别最高.其内部由几个循环(loop)组成:主循环(loop).后台循环( ...

  4. C语言程序流程设计之循环【程序流程设计】(13)

    循环 循环三要素 死循环 可控循环 可控循环的三要素 while "当"型循环 语法结构及流程 解析 代码演示 do while"直到"型循环 语法及流程 解析 ...

  5. 4.帧循环(游戏主循环),schedule

     1 概述 游戏乃至图形界面的本质是不断地绘图,然而绘图并不是随意的,任何游戏都需要遵循一定的规则来呈现出来,这些规则就体现为游戏逻辑.游戏逻辑会控制游戏内容,使其根据用户输入和时间流逝而改变.因 ...

  6. C语言中要改变循环语句的流程可以使用的语句有哪些

    C语言中要改变循环语句的流程可以使用的语句有:break,continue和goto.break语句可以终止循环而执行整个循环语句后面的代码:continue语句可以跳过循环体中剩余的语句而强制进入下 ...

  7. Linux-2.6.25 TCPIP函数调用大致流程

    Linux-2.6.25 TCPIP函数调用大致流程 学习目的,随手笔记.函数和文字说明会不断补充更新. Changelog 2008.10.08    最近找工作忙.暂时缓缓 插口层 系统调用 se ...

  8. WordPress 主题教程 #5:主循环

    调用博客日志的主循环(The Loop)是 WordPress 中最重要的 PHP 代码集,几乎所有的页面都会用到它.这也是从零开始创建 WordPress 主题系列教程的第五篇. 在开始继续学习之前 ...

  9. 【蓝桥杯嵌入式】【STM32】2_KEYBOARD(主循环扫描+外部中断)

    文章目录 1 原理图 2 部分源码 主循环扫描实现 外部中断实现   下载工程文件:   https://gitee.com/Joseph_Cooper/blue-bridge-embedded 1 ...

最新文章

  1. CentOS中vsftp安装与配置
  2. [POJ 1222] EXTENDED LIGHTS OUT
  3. OpenGL材质Materials
  4. WordPress插件开发-创建、停用、删除插件
  5. c mysql 视图_MySQL入门教程(七)之视图
  6. ASP.NET中UpdatePanel与jQuery同时使用所遇问题解决
  7. Visual Studio 2019 v16.8 Preview 2 发布
  8. 取模运算与hash function
  9. Python学习之表的数据类型
  10. 大数据技术——hadoop组件
  11. 极验打码平台官网地址
  12. 灵遁者组诗:无数个存在的可能
  13. php cdr,cdr文件用什么打开
  14. Paddle入门实战系列(二)基于PaddleOCR的体检报告识别
  15. 数据结构c语言——树的三种存储结构(双亲表示法、孩子表示法、兄弟表示法)
  16. HTML <ins> 标签
  17. CVPR2020/UDA/图像翻译-Cross-domain Correspondence Learning for Exemplar-based Image Translation基于范例的跨域对应
  18. 【python制作小游戏】大鼻子马里奥等你来挑战,还原度超高哦~
  19. 如何在官网下载各个版本的tomcat
  20. Swift5 1.基础介绍

热门文章

  1. Arduino教程:MPU6050的数据获取、分析与处理
  2. 初学Node(五)文件I/O
  3. 链表——PowerShell版
  4. Android组件系列----Activity的生命周期
  5. SQLite命令行程序说明
  6. h3c_rip附加相关视频
  7. 安卓 静态文件读取 staticFile
  8. ROS系统 参数的获取和设置
  9. A Network-based End-to-End Trainable Task-oriented Dialogue System
  10. ytu 1057: 输入两个整数,求他们相除的余数(带参的宏 + 模板函数 练习)