php运行模式及线程安全选择

CGI/FastCgi系列

CGI

CGI是为了保证web server传递过来的数据是标准格式。

  • 例如nginx只是内容的分发者。请求/index.html,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。如果现在请求的是/index.php,根据配置文件,nginx知道这个不是静态文件,那么他会把这个请求简单处理后交给PHP解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器。

  • 每次请求,都创建一个cgi的子进程,激活一个CGI进程,然后处理请求,处理完后结束这个子进程,fork-and-execute模式。

  • CGI就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议

FastCgi

  • 标准的cgi每次都会执行PHP解析器会解析php.ini文件,初始化执行环境这一步

  • Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。

  • 缺点 修改了php.ini后没办法直接生效,因为跳过了标准CGI每次都会执行的解析

  • 属于一种增强协议

PHP-CGI

  • 早期php官方出品的FastCgi管理器,实现了FastCgi协议,属于具体实现方式。
  • 不支持平滑重启,改了php.ini就要kill掉原来的php-cgi再重新启动才能生效
  • 不支持动态worker调度,只能一开始指定要起几个worker

APACHE2HANDLER

  • 把php当作Apache服务的模块,进而实现了FastCgi协议,属于具体实现方式。
  • Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出现,就立即使用这些空余的子进程进行处理
  • 专门用于apache服务器
  • 也不支持平滑重启

PHP-FPM

  • 也是官方的fastcgi管理器,属于具体实现方式。fastcgi是一个协议,php-fpm实现了这个协议。并作为fastcgi进程的管理器,来管理fastcgi进程,同时解决了修改php.ini后没办法直接生效的问题

  • 常用于nginx

  • 支持动态调节,当worker不够用时,master可以启动几个worker等着;当然空闲worker太多时,就会停掉一些

  • php-fpm解决修改php.ini配置平滑重启的方式是:

    • php-fpm的热加载和类似nginx,收到重新加载配置的信号的话,先kill掉空闲worker进程,而正在处理连接的子进程继续处理请求,请求结束再退出操作。同时master进程会重新拉起新的worker进程,保证新的请求用上解析新配置后的worker。这样就实现平滑过渡。

ISAPI系列

  • 微软专门提供的一套面向WEB服务的接口协议,它能实现CGI/FASTCGI提供的全部功能
  • 常用于IIS服务器
  • 他启动的worker的不是进程而是线程

线程安全

  • CGI/FASTCGI协议都明显是单独提供一个进程来处理请求,因此都不存在线程安全的问题,但这只是在Linux上

  • 在windows上就是不一样,ISAPI使用了多线程来实现而不是多进程,许多php模块是按照多进程思想来实现的,所以不是线程安全的,所以需要使用Thread Safe的PHP

  • windows上的xampp,虽然是apache服务器,即使用了APACHE2HANDLER模式,也是多线程实现,所以用了线程安全方式

在这里插入图片描述

phpstorm

  • 在搭配xampp情况下
    • 如果是PHP文件运行在本地的apache服务器,使用的是APACHE2HANDLER模式,如果修改php.ini,需要重启apache服务器,使master进程重新加载配置
    • 而如果使利用phpstorm本身作为服务器启动,使用的则是IDE实现FastCgi协议的模式,如果修改php.ini,则需要重启phpstorm,使master进程重新加载配置
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值