PHP多进程(3)信号

上一节:PHP多进程(2)孤儿进程与僵尸进程,说到pcntl_wait()pcntl_waitpid(),是为了解决僵尸进程问题,但最后看起来还是有一些遗留问题,而且上j节文章的结尾也给了解决方案:信号

本文参考地址:https://github.com/elarity/advanced-php/blob/master/4.%20php%E5%A4%9A%E8%BF%9B%E7%A8%8B%E5%88%9D%E6%8E%A2—%E4%BF%A1%E5%8F%B7.md

信号是一种软件中断,也是一种非常典型的异步事件处理方式。在 *nix 系统诞生的混沌之初,信号的定义是比较混乱的,而且最关键是不可靠,这是一个很严重的问题。所以在后来的POSIX标准中,对信号做了标准化同时也各个发行版的 *nix 也都提供大量可靠的信号。每种信号都有自己的名字,大概如SIGTERMSIGHUPSIGCHLD等等,在 *nix 中,这些信号本质上都是整形数字(可以参观一下signal.h系列头文件)。


PHP多进程(2)孤儿进程与僵尸进程

上一节:PHP多进程(1)PHP多进程初探,简单了解了一下关于PHP多进程和简单的通过代码了解其中的一些问题。

那这一节,来学习一下关于 孤儿进程与僵尸进程

本文参考地址:https://github.com/elarity/advanced-php/blob/master/3.%20php%E5%A4%9A%E8%BF%9B%E7%A8%8B%E5%88%9D%E6%8E%A2—%E5%AD%A4%E5%84%BF%E5%92%8C%E5%83%B5%E5%B0%B8.md

实际上,我们要记住:PHP的多进程是非常值得应用于生产环境具备高价值的生产力工具。

上节介绍的都是pcntl_fork(),只管fork生产,不管后续护理,实际上这样并不符合主流价值观,而且,操作系统本身资源有限,这样无限生产不顾护理,操作系统也会吃不消。


PHP多进程(1)PHP多进程初探

问题描述:

近日在开发过程中出现了一个奇葩问题。 在我使用 PHP子进程处理发邮件的时候,在隔天再次1触发相关代码流程时,会把昨天的数据从使用子进程后再次重新处理一遍。导致数据出现重复,引发脏数据。为此,优化了代码,并且重新梳理了一下关于PHP多进程的问题。

本文参考地址:https://github.com/elarity/advanced-php/blob/master/2.%20php%E5%A4%9A%E8%BF%9B%E7%A8%8B%E5%88%9D%E6%8E%A2—%E5%BC%80%E7%AF%87.md

PHP是有多线程的。使用PHP的多线程首先需要下载安装一个线程安全版本(ZTS版本)的PHP,然后再安装pecl的pthread扩展。

实际上PHP是有多进程的,有一些人在用,总体来说php的多进程还算凑合,只需要在安装PHP的时候开启pcntl模块即可。在*NIX下,在终端命令行下使用php -m就可以看到是否开启了pcntl模块。


PHP判断两个数字是否是同符号

问题:写一个函数,判断给定的两个数字是否是符号相同的,不可以使用比较运算符或与0比较。

例如 is_same_symbol(-1, 10) == false; is_same_symbol(10,20)=true; is_same_symbol(-1,-10)=true; 同时,规定0属于正数。

在二进制表示中,最高位是1的话,就是负数。最高位为0则为正数。因此我可以想办法通过位运算来判断。1 ^0 = 1。所以 负数^正数=负数。其实就是类似于乘法了。


PHP的目录结构、设计理念以及核心架构

前一节:使用ext_skel,实现一个PHP扩展,试着使用 ext_skel 写了一个扩展,通过上一节可以大体了解自己如何写一个扩展。这一节主要介绍一下PHP的目录结构、设计理念以及核心架构。

一、PHP的目录结构

PHP源代码还包括在开发过程中生成的几个文件,以及在上游各自位置进行维护的几个部分。(注:PHP版本7.4.13)