zoukankan      html  css  js  c++  java
  • PHP SAPI

    sapi是PHP框架的接口层,它是进入PHP内部的入口,cli、fpm sapi是完整实现的应用程序。

    cli:

         Command Line Interface 即命令行接口,用于在命令行下执行PHP脚本。cli是单进程模式,执行完请求后就直接关闭了。cli sapi的main函数位于sapi/cli/php_cli.c中。 内置web服务器,如果请求未指定执行哪个PHP脚本,则默认执行目录下的index.php 或index.html,如果这两个文件都不存在则返回404

    fpm:

          FastCGI Process Manage 是PHP fastcgi 运行模式下的进程管理器,fastCGI是web服务区(nginx、apache)和处理程序之间的一种通信协议,它只是一种协议,为了让PHP处理http请求,因为PHP并没有像golang那也实现http网络库,而是实现了fastcgi协议,然后与web服务器配合实现了http的处理,web服务器来处理http请求,然后将解析的结果再通过fastcgi协议转发给处理程序,处理程序执行完之后再将处理结果返回给web服务器,web服务器再返回给用户。

         PHP实现了fastcgi协议的处理,但是并没有实现具体的网络处理,比较常见的网络处理模型:

         1、多进程模型:由一个主进程和多个子进程,主进程用来管理子进程,子进程用来处理基本的网络事件,nginx就是这种模型。

         2、多线程模型:由主线程接听,接收请求,然后交给子线程处理,memcache就是这种模式。

         进程拥有独立的地址空间和资源,而线程没有,线程共享地址空间和资源,所以在资源管理上,多进程模型比较简单,而多进程模型则需要考虑不同线程之间的资源冲突,也就是线程安全。

         基本实现:

         fpm是一种多进程模型,它由一个master主进程和多个work子进程组成,master进程启动时会创建一个socket,但是不会接收、处理请求,而是由fork出来的多个work子进程进行接收、处理请求。

        master的主要工作是管理work子进程,比如当很多请求work进程处理不过来的时候,master进程会fork出来多个work进程进行出来,当没有那么多请求的时候,master进程会杀死部分空间的work进程,避免系统资源的浪费。

        fpm下不需要考虑并发导致的资源冲突

        fpm三种不同的进程管理方式:

         1、静态模式

         2、动态模式

         3、按需模式

         

  • 相关阅读:
    Connected Graph
    Gerald and Giant Chess
    [NOI2009]诗人小G
    四边形不等式小结
    [NOI2007]货币兑换
    Cats Transport
    Cut the Sequence
    Fence
    The Battle of Chibi
    [Usaco2005 Dec]Cleaning Shifts
  • 原文地址:https://www.cnblogs.com/weiluoyan/p/8836295.html
Copyright © 2011-2022 走看看