PHP中提供了一个扩展pcntl,可以利用操作系统的fork调用来实现多进程。fork调用后执行的代码将是并行的。

PHP官方没有提供多线程的扩展,pecl中有一个pthreads扩展提供了多线程的特性,地址是http://pecl.php.net/package/pthreads,此扩展仅在线程安全版本中可用。

多进程

  1. 使用多进程, 子进程结束以后, 内核会负责回收资源
  2. 使用多进程, 子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程.
  3. 一个常驻主进程, 只负责任务分发, 逻辑更清楚.
  4. 多进程方式更加稳定,另外利用进程间通信(IPC)也可以实现数据共享。
  5. 共享内存,这种方式和线程间读写变量是一样的,需要加锁,会有同步、死锁问题。
  6. 消息队列,可以采用多个子进程抢队列模式,性能很好

多线程

  1. 线程是在同一个进程内的,可以共享内存变量实现线程间通信
  2. 线程比进程更轻量级,开很大量进程会比线程消耗更多系统资源
  3. 多线程也存在一些问题:

    • 线程读写变量存在同步问题,需要加锁
    • 锁的粒度过大存在性能问题,可能会导致只有1个线程在运行,其他线程都在等待锁
    • 同时使用多个锁,逻辑复杂,一旦某个锁没被正确释放,可能会发生线程死锁
    • 某个线程发生致命错误会导致整个进程崩溃

php搭建pcntl

在PHP中进程控制支持默认是关闭的。您需要使用 –enable-pcntl 配置选项重新编译PHP来打开进程控制支持。注:pcntl只支持Linux版本

##本例用的php版本的是5.3.3,
cd php-5.3.3/ext/pcntl
phpize
./configure --with-php-config=/usr/local/bin/php-config
make
make isntall

在php.ini下加入pcntl.so即可

extension=pcntl.so

代码演示

现在我们通过 pcntl扩展来调用操作系统的fork实现多进程。fork调用后执行的代码将是并行的。

<?php
$pid = pcntl_fork();
if($pid > 0){echo "parent\n";
}elseif($pid == 0){echo "child\n";
}else{echo "error\n";
}

参考地址:

http://php.net/manual/zh/book.pcntl.php

http://www.laruence.com/2009/06/11/930.html

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/linzhenjie/p/5485419.html

PHP系统编程--01.多进程与多线程相关推荐

  1. Linux高并发服务器开发---笔记1(环境搭建、系统编程、多进程)

    0613 第4章 项目制作与技能提升 4.0 视频课链接 4.1 项目介绍与环境搭建 4.1.1 项目介绍 4.1.2 开发环境搭建 ①安装Linux系统.XSHELL.XFTP.Visual Stu ...

  2. 黑马程序员-Linux系统编程-01

    课程链接 01-Linux命令基础习惯-Linux系统编程_哔哩哔哩_bilibili 课程重点笔记 01-linux命令基础习惯 终端 终端:一切输入.输出的总称,因此终端并不是一定指的是命令行,只 ...

  3. python并发编程之多进程、多线程、异步和协程

    转载 自 tyomcat: https://www.cnblogs.com/tyomcat/p/5486827.html 一.多线程 多线程就是允许一个进程内存在多个控制权,以便让多个函数同时处于激活 ...

  4. linux多线程编写哲学家,Linux系统编程(三) ------ 多线程编程

    一.线程的创建和调度 1.线程是程序执行的某一条指令流的映像. 为了进一步减少处理机制的空转时间,支持多处理器及减少上下文切换开销,进程在演化中出现了另一个概念--线程.它是进程内独立的一条运行路线, ...

  5. Linux系统编程 | 01 -文件操作

    一.文件操作方法 linux中有两种方法可以操作文件:系统调用和c库函数. 1. 什么是系统调用? 由操作系统实现并提供给外部应用程序的编程接口(API),是应用程序同系统之间数据交互的桥梁. C标准 ...

  6. 2019年8月8日星期四(系统编程)

    2019年8月8日星期四 一. linux系统编程学习大纲 1. 进程的概念,进程诞生与死亡,进程函数接口,进程的意义. 2. 进程之间通信方式:有名管道,无名管道,信号,消息队列,共享内存,信号量 ...

  7. 并发编程含义比较广泛,包含多线程编程、多进程编程及分布式程序等 目录 1. “共享内存系统”,消息传递系统”。 1 1.1. 共享模式 多进程 多线程 1 1.2. Actor消息模式 事件驱动 2

    并发编程含义比较广泛,包含多线程编程.多进程编程及分布式程序等 目录 1. "共享内存系统",消息传递系统". 1 1.1. 共享模式 多进程 多线程 1 1.2. Ac ...

  8. 【2021最新版】Python 并发编程实战,用多线程、多进程、多协程加速程序运行

    [2021最新版]Python 并发编程实战,用多线程.多进程.多协程加速程序运行 视频地址:https://www.bilibili.com/video/BV1bK411A7tV/ P1 Pytho ...

  9. 一文看懂Python多进程与多线程编程(工作学习面试必读)

    进程(process)和线程(thread)是非常抽象的概念, 也是程序员必需掌握的核心知识.多进程和多线程编程对于代码的并发执行,提升代码效率和缩短运行时间至关重要.小编我今天就来尝试下用一文总结下 ...

最新文章

  1. C#事件(event)解析
  2. Android BLE 低功耗蓝牙技术使用解析
  3. linux去重文件第一列,科学网—Linux实用命令 - 刘洪波的博文
  4. 结对编程2——单元测试
  5. 应用层的AIDL用法(原)
  6. mysql8连接数据库显示cache_MySQL数据库之mysql 8.0 java连接报错:Unknown system variable 'query_cache_size'...
  7. FreeRTOS--API函数
  8. Facebook工程师之死,一个走钢丝的互联网中年男人
  9. SAP License:玩转SAP中的凭证冲销
  10. 软件_linux命令cp目录路径和通配符
  11. spark sql cache
  12. Otsu详细算法解析
  13. 创业板首批企业或节前招股 新公布6家上会公司
  14. 分层结构的生活例子_系统抽样和分层抽样在现实生活中有什么例子?
  15. 常用Word 排版要求
  16. mysql oob_mysql 读写文件特性和OOB注入
  17. 十大三维动画制作软件(转载)
  18. vue:element ui分页改变pageSize,触发两次回调请求
  19. 护眼灯哪些牌子好?央视推荐的护眼台灯
  20. MySQL学习笔记:全文本搜索

热门文章

  1. Linux服务器上配置anaconda环境
  2. python版本升级后编译_python学习笔记(7)--python版本升级
  3. @Configuration
  4. 039_Dialog对话框
  5. jsp文件通常用common_JSP使用commons-fileupload实现文件上传实例
  6. json解析详解 java_Java解析Json数据的两种方式详解
  7. RxJava 教程第一部分:入门之 生命周期管理
  8. 第三篇 :Mysql存储引擎、数据导入导出、管理表记录、匹配条件
  9. qt 定义一个长度的数组,Qt - 声明一个QLabel数组并将其添加到QTabWidget的选项卡
  10. linux 查明文密码,win10系统查看明文密码的操作方法