PHP简介

本文介绍了PHP的性质,解释了编译型与解释型语言的区别,探讨了线程与进程的差异,并详细阐述了PHP-FPM的工作原理,包括其在CGI与FastCGI协议中的角色,以及Nginx与PHP-FPM的配合流程和通信方式。此外,还对比了TCP socket与Unix Socket的优劣。
摘要由CSDN通过智能技术生成

本文一个6个问题

  1. PHP简介
  2. 线程与进程
  3. 解释型语言和编译型语言
  4. 进程管理工具PHP-FPM
  5. Nginx与PHP-FPM
  6. TCP socket 与Unix Socket 的区别

PHP简介

PHP全称开始为Personal Home Page的缩写,现正式更名为 "PHP: Hypertext Preprocessor"。PHP是一个解释型语言(解释型和编译型详见补充),多进程单线程(也可以为多线程,需要其他拓展)。PHP使用PHP-FPM进程管理工具接收和处理来自web 服务器(如nginx)的请求。PHP-FPM 有一个主进程master,负责创建、销毁子进程,分发HTTP 请求给子进程,多个子进程worker,负责处理HTTP 请求,一个子进程里一个线程。

编译型语言与解释型语言

编译型语言

编译型语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译为机器语言的文件比如exe文件,以后要运行就不需要重新编译了,直接使用编译好的结果

(exe文件)就可以,编译型语言的程序执行效率高。如c/c++

解释型语言

解释型语言不需要编译,在运行程序的时候才翻译,比如解释型basic语言,专门有一个解释器能够直接执行basic程序,每个语言都是在执行的时候才翻译。解释型语

言每执行一次就需要解释一次,效率比较低,但是跨平台性好,如:java、C#,basic, PHP,Python

 

进程与线程

 

线程与进程的区别可以归纳为以下4点:

1、地址空间和其它资源(如打开文件):

进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。

2、通信:

进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信,需 要进程同步和互斥手段的辅助,以保证数据的一致性。

3调度和切换:

线程上下文切换比进程上下文切换要快得多。

在多线程操作系统中,进程不是一个可执行的实体。

线程的特点

在多线程的操作系统中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。线程具有以下属性。

1、轻型实体

1.1、线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源。

1.2、线程的实体包括程序、数据和TCB。线程是动态概念,它的动态特性由线程控制块TCB(Thread Control Block)描述,TCB用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。

TCB包括以下信息:

1、线程状态。

2、当线程不运行时,被保存的现场资源。

3、一组执行堆栈。

4、存放每个线程的局部变量主存区。

5、访问同一个进程中的主存和其它资源。

6、独立调度和分派的基本单位

在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小(在同一进程中的)。

1、共享进程资源

线程在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的进程id,这意味着,线程可以访问该进程的每一个内存资源;此外,还可以访问进程所拥有的已打开文件、定时器、信号量机构等。由于同一个进程内的线程共享内存和文件,所以线程之间互相通信不必调用内核。

2、可并发执行

在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行,充分利用和发挥了处理机与外围设备并行工作的能力。

PHP-FPM

想要了解PHP-FPM需要现了解CGI和Fast-cgi两个概念。

CGI 协议与FastCGI 协议

每种动态语言( PHP,Python 等)都需要通过对应的解析器才能被服务器识别,而CGI 协议就是解释器与服务器可以互相通信的协议。PHP 文件的解析需要用到PHP

解释器,再加上对应的CGI 协议,从而使服务器可以解析到PHP 文件。由于CGI 的 机制是每处理一个请求需要fork 一个CGI 进程,请求结束再kill 掉这个进程,在实际 应用上比较浪费资源,于是就出现了CGI 的改良版本FastCGI,FastCGI 在请求处理 完后,不会kill 掉进程,而是继续处理多个请求,这样就大大提高了效率。

PHP-FPM 是什么

PHP-FPM 即PHP-FastCGI Process Manager, 它是FastCGI 的实现,并提供了进程管理的功能。进程包含master 进程和worker 进程两种;master 进程只有一个,负责监听端口,接收来自服务器的请求,而worker 进程则一般有多个(具体数量根据实际需要进行配置),每个进程内部都会嵌入一个PHP 解释器,是代码真正执行的地方。

 

Nginx与PHP-FPM

Nginx 与PHP-fpm 结合流程是

请求一个域名----->DNS服务器解析域名到服务器----->nginx 80端口(默认)监听到请 求----->加载 nginx 的 fast-cgi 模块----->php-fpm 监听 127.0.0.1:9000----->PHP-FPM 接收请求,启用worker 进程处理请求,处理完成后返 回给nginx----->nginx 将结果通过http 返回给浏览器

Nginx 与PHP-FPM 的通讯方式

在Linux 上,nginx 与php-fpm 的通信有tcp socket 和unix socket 两种方式。tcp socket的优点是可以跨服务器,当nginx 和php-fpm 不在同一台机器上时,只能使用 这种方式;Unixsocket 又叫IPC(inter-process communication 进程间通信) socket, 用于实现同一主机上的进程间通信,这种方式需要在nginx 配置文件中填写php-fpm 的socket 文件位置。

TCP socket 与Unix Socket 的区别

Unix socket 不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答

等,只是将应用层数据从一个进程拷贝到另一个进程。效率比tcp socket 的方式要高,可减少不必要的tcp 开销。但unix socket 高并发时不稳定,连接数爆发时,会产生大量的长时缓存,在没有面向连接协议的支撑下,大数据包可能会直接出错不返回异常。而tcp 这样的面向连接的协议,可以更好的保证通信的正确性和完整性。

并非大神,记录学习,如有错误欢迎指正,互相学习!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值