博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP系统编程--多进程与多线程
阅读量:6830 次
发布时间:2019-06-26

本文共 866 字,大约阅读时间需要 2 分钟。

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

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

多进程

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

多线程

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

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

php搭建pcntl

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

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

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

extension=pcntl.so

代码演示

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

转载于:https://www.cnblogs.com/gezhengbin/p/7278054.html

你可能感兴趣的文章
微信分享JS接口失效说明及解决方案
查看>>
ThinkPHP项目笔记之RBAC(权限)下篇
查看>>
log4j配置具体解释
查看>>
买低配车,更保值?!坊间有一句戏言:买车都要买低配
查看>>
数据迁移
查看>>
ubuntu14中创建python虚拟环境
查看>>
简单两步使用node发送qq邮件
查看>>
CSS
查看>>
区块链架构
查看>>
PHP Primary script unknown 终极解决方法
查看>>
3D文本悬停改变效果
查看>>
递归算法的时间复杂度
查看>>
有点不安全却又一亮的 Go unsafe.Pointer
查看>>
Linux安装mysql 8.0
查看>>
Webpack vs Rollup
查看>>
Springboot 前后端参数交互方式
查看>>
px、em、rem、%、vw、vh、vm等单位有什么区别?
查看>>
滴滴出行基于RocketMQ构建企业级消息队列服务的实践
查看>>
如何理解git rebase?
查看>>
程序部署到服务器服务无法启动问题
查看>>