• php生命周期


    <?php


    /*
    * 1.php概述
    * php快速灵活的脚本语言,支持面向程序和面向对象,语法混合了c java perl和php自己的一些语法,相比来说更加灵活 简洁 开发效率高 容易上手
    * 开源免费 快捷灵活 效率高 类库资源丰富 扩展c/c++丰富 跨平台(zend虚拟机)
    * 2. SPAI 概述
    php内核提供语言编译和执行功能,标准输入、输出,SAPI就是php内核的接入层,是内核的入口。
    SAPI 常用的有php-fpm cli cgi web模块 ISAPI五大模式,cli处理模式比较简单,php-fpm实现了网络处理模块的web交互部分
    cli模式下,PHP提供的POSIX和Pcntl系列函数实现多进程的应用
    子进程的优点:
    1. 使用多进程, 子进程结束以后, 内核会负责回收资源
    2. 使用多进程,子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程.
    3. 一个常驻主进程, 只负责任务分发, 逻辑更清楚.
    zend引擎
    php语言的核心 编译执行的部分 编译器 + 执行器
    扩展

    * 3. php的执行流程
    * 模块初始化 (注册常量EG(zend_constants) , 注册ini配置EG(ini_directives) , 注册全局变量CG(auto_globals) , 注册静态编译的核心扩展、ini配置饿扩展 , 扩展的初始化 )
    * 请求初始化 (gc_reset计数器重置, 初始化编译器 , 初始化EG(function_table class_table auto_func symbol_table) , 初始化词法分析器 )
    * 脚本执行阶段 (脚本加载,词法分析,语法分析编译成opcode,编译成语法抽象树op_array, zend_execute()调用zvm的指令去执行)
    * 请求关闭 ( 依次调用注册的shutdown函数,清理EG(symbol_table)符号表,调用变量的析构函数, 清理文件句柄 socket连接等, 数据所有flush, 关闭output,关闭编译器执行器, 关闭内存管理)
    * 模块关闭 ( 清理持久化符号表,清理扩展, 销毁EG ,释放PG))
    *
    * 4.FPM php的fastCGI进程管理器,fastCGI是web服务器和处理程序的通信协议
    * fpm 创建一个master和多个worker进程,master通过共享内存来获取worker进程的信息,通过信号来发送控制信号去杀死一个worker
    * fpm可以监听多个端口,每个端口可以创建一个worker pool ,每个pool下拥有多个worker。
    * fpm的 conf文件
    * [web1]
    listen = 127.0.0.1:9000
    ...

    [web2]
    listen = 127.0.0.1:9001
    ...

    * 查看fpm的进程 ps -aux|grep fpm 可以看到master和worker的状态
    root 27155 0.0 0.1 144704 2720 ? Ss 15:16 0:00 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf)
    nobody 27156 0.0 0.1 144676 2416 ? S 15:16 0:00 php-fpm: pool web1
    nobody 27157 0.0 0.1 144676 2416 ? S 15:16 0:00 php-fpm: pool web1
    nobody 27159 0.0 0.1 144680 2376 ? S 15:16 0:00 php-fpm: pool web2
    nobody 27160 0.0 0.1 144680 2376 ? S 15:16 0:00 php-fpm: pool web2

    * fpm的进程管理方式有三种:static (master按照要求fork出配置要求的数量的worker进程,保存worker进程数不变)
    * dynamic (master初始化一定数量的worker,运行期间发现worker空闲率比较低,继续fork进程去处理,不能超过配置最大进程数,空闲率比较高就杀死一些进程)
    * ondemand 这种方式很少使用,不提前分配子进程,请求来了实时分配,处理完请求设置idle_timeout时间去退出worker
    *

    *
    */
  • 相关阅读:
    expdp定时备份
    设计模式简介
    利用Python制作万年历
    Linux下Python的安装
    排序算法-直接插入排序
    排序算法-冒泡排序
    数据结构-循环顺序队列&链队列
    数据结构-栈&链栈
    数据结构-双向链表&双向循环链表
    数据结构-单链表&单循环链表
  • 原文地址:https://www.cnblogs.com/hellohell/p/8269025.html
Copyright © 2020-2023  润新知