php实现多进程、多线程

  孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

  僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

  僵尸进程危害:如果进程不调用wait / waitpid的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。任何一个子进程(init除外)在exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。

  已经产生的僵尸进程,解决方法:kill掉父进程,它产生的僵死进程就变成了孤儿进 程,这些孤儿进程会被init进程接管,init进程会wait()这些孤儿进程,释放它们占用的系统进程表中的资源。

  僵尸进程解决办法

  (1)通过信号机制

    子进程退出时向父进程发送SIGCHILD信号,父进程处理SIGCHILD信号。在信号处理函数中调用wait进行处理僵尸进程。

  (2)fork两次
    《Unix 环境高级编程》8.6节说的非常详细。原理是将子进程成为孤儿进程,从而其的父进程变为init进程,通过init进程可以处理僵尸进程。

1. [代码]PHP实现多进程并行操作(可做守护进程)

 1 /**
 2  * 入口函数
 3  * 将此文件保存为 ProcessOpera.php
 4  * 在terminal中运行 /usr/local/php/bin/php ProcessOpera.php &
 5  * 查看进程 ps aux|grep php
 6  */
 7
 8
 9 ProcessOpera("runCode", array(), 8);
10
11 /**
12  * run Code
13  */
14 function runCode($opt = array()) {
15    //需要在守护进程中运行的代码
16 }
17
18 /**
19  * $func为子进程执行具体事物的函数名称
20  * $opt为$func的参数 数组形式
21  * $pNum 为fork的子进程数量
22  */
23 function ProcessOpera($func, $opts = array(), $pNum = 1) {
24     while(true) {
25         $pid = pcntl_fork();
26         if($pid == -1) {
27             exit("pid fork error");
28         }
29         if($pid) {
30             static $execute = 0;
31             $execute++;
32             if($execute >= $pNum) {
33                 pcntl_wait($status);
34                 $execute--;
35             }
36         } else {
37             while(true) {
38                 //somecode
39                 $func($opts);
40                 sleep(1);
41             }
42             exit(0);
43         }
44     }
45 }
时间: 2024-08-24 10:38:51

php实现多进程、多线程的相关文章

Linux统系统开发11 Socket API编程2 多进程 多线程 高并发处理

[本文谢绝转载原文来自http://990487026.blog.51cto.com] <纲要> Linux统系统开发11 Socket API编程2 多进程 多线程 高并发处理 UDP服务器 客户端最小模型,处理字符转大写 TCP 多进程并发服务器模型,为每个客户端开启一个进程: TCP 多线程服务器模型,使用wrap函数封装 作业: ---------------------------------------------------- UDP服务器 客户端最小模型,处理字符转大写 [em

一个简单的多进程+多线程+协程的例子

因为一个朋友最近想搞接口压力测试,推荐了jmeter,因为jmeter开源,且有命令行启动模式,方便封装.兴起时,自己也简单实现了一下高并发的脚本. 采用的是多进程+多线程+协程.想法是这样的,多进程是为了有效利用多核,理论上最好一个核对应一个进程比较好:那我为什么还要用多线程呢?不怕GIL全局锁吗?这是因为我用了gevent处理,请求采用requests,但requests是阻塞的方法,所以我把requests操作丢到协程做,就没啥问题了.接下来看看脚本,实现了一个2000并发量的脚本(写的比

关于Python和Java的多进程多线程计算方法对比

原文请见 关于Python和Java的多进程多线程计算方法对比 搞大数据必须要正视的一个问题就是并行计算.就像执行一件任务一样,大伙一起同时干,才有效率,才会很快出成果.正所谓"众人拾柴火焰高"~ 对于并行计算,有很多高大上的概念,我也不全懂.这里就单单罗列一下我对于多进程和多线程计算的理解和总结. 在计算机中,处理一个任务,可以在一个进程中,也可以在一个线程中,确切的说,执行的话都得靠一个个线程来.在我们做某件事的时候,往往需要同时干多个任务才能达到我们所要的效果,比如说看电影,就要

C/S架构与多进程多线程

如题,C/S架构指的是服务器(Server)与客户机(Client)协作完成网络程序功能的一种模式.它是已经在计算机世界活跃数十年的一种古老的软件架构.如今已渗入到各领域IT系统中.其模型如下所示. 本文从以下3个方面阐述C/S架构软件设计与多进程多线程实现多任务框架. 1.C/S工作原理 2.多任务设计 3.多进程与多线程选择 1.C/S工作原理 从计算机技术发展到应用到通信金融等商业领域时候起,C/S模式的需求就随之诞生了. 其工作模式能够满足众多客户的计算机使用需求,且能够简化程序设计的过

[转帖]Windows和Linux对决(多进程多线程)

Windows和Linux对决(多进程多线程) https://blog.csdn.net/world_2015/article/details/44920467 太长了 还没看完.. 还是没太理解好呢.. 关于 windows 和 linux的东西 先放这里 晚上有时间仔细啃一下. 并行程序设计分为共享内存和消息驱动(其实就是分布式内存)两种, 共享内存:所有CPU共内存,所有CPU由一个操作系统控制的,例如Windows和Linux/UNIX,目前流行的多核.多CPU机器都是属于这种: 消息

重学浏览器(1)-多进程多线程的浏览器

浏览器是我们上网的一个重要工具,是我们重要的信息来源,这里以Chrome浏览器为对象,同时作为一名前端工程师,之前对于浏览器的认知还不够深入,所以借着这一系列的文章,进行浏览器的逐步分析与学习,加深自己的知识储备.同时这部分知识也是做页面性能优化,健康度监控等工具时所必须的基础知识. 进程和线程 进程是系统内存分配的一小部分内存空间 进程之间相互独立(不同进程之间可以相互通信,不过代价很大) 进程由单个或多个线程组成 多个线程之间是可以相互协作完成工作的 同一个进程中各个线程之间共享同一块内存空

Linux 多进程多线程相关概念

进程:可执行程序是存储在磁盘设备上的由代码和数据按某种格式组织的静态实体,而进程是可被调度的代码的动态运行.在Linux系统中,每个进程都有各自的生命周期.在一个进程的生命周期中,都有各自的运行环境以及所需的资源,这些信息都记录在各自的进程控制块中,以便系统对这些进程进行有效的管理,进程控制块的结构如下图所示: 每个进程都有各自独立的虚拟地址空间,空间的大小与所基于的硬件体系结构有关.虚拟空间中各区代表的意义,代码段存储指令序列和只读数据,多个进程实例可共享代码段.数据段用来存放全局变量和静态变

(转)多进程 &amp; 多线程的区别与适用场景

转自:http://www.cnblogs.com/huntfor/p/4021327.html 关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害.经常在网络上看到有的XDJM问“多进程好还是多线程好?”.“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好.根据实际情况来判断,哪个更加合适就是哪个好.我

【转】多进程 &amp; 多线程的区别与适用场景

关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害.经常在网络上看到有的XDJM问“多进程好还是多线程好?”.“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好.根据实际情况来判断,哪个更加合适就是哪个好.我们按照多个不同的维度,来看看多线程和多进程的对比(注:因为是感性的比较,因此都是相对的,不是说一个

GDB常用调试命令以及多进程多线程调试

转载自:http://blog.csdn.net/freeelinux/article/details/53700266 一:普通命令 1.list命令 list  linenum      显示程序第linenum行周围的程序 list  function      显示函数名为function的函数的源程序 list                      显示当前行后面的源程序 list -                    显示当前行前面的源程序 2.run(r) 运行命令. ru