php不支持多线程怎么办

简介: PHP 默认并不支持多线程,要使用多线程需要安装 pthread 扩展,而要安装 pthread 扩展,必须使用 --enable-maintainer-zts 参数重新编译 PHP,这个参数是指定编译 PHP 时使用线程安全方式。

__20191026142517
PHP 默认并不支持多线程,要使用多线程需要安装 pthread 扩展,而要安装 pthread 扩展,必须使用 --enable-maintainer-zts 参数重新编译 PHP,这个参数是指定编译 PHP 时使用线程安全方式。
线程安全
多线程是让程序变得不安分的一个因素,在使用多线程之前,首先要考虑线程安全问题:
线程安全:线程安全是编程中的术语,指某个函数、函数库在多线程环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。
在传统多线程中,由于多个线程共享变量,所以可能会导致出现如下问题:
存在一个全局数组$arr = array('a');;
A线程获取数组长度为1;
B 线程获取数组长度为1;
A 线程 pop 出数组元素 $a = array_pop($arr); $a = 'a';;
B 线程也 pop 数组元素 $b = array_pop($arr); $a = null;;
此时 B 线程内就出现了灵异事件,明明数组长度大于0,或没有 pop 出东西;
PHP 实现
PHP 实现的线程安全主要是使用 TSRM 机制对 全局变量和静态变量进行了隔离,将全局变量和静态变量 给每个线程都复制了一份,各线程使用的都是主线程的一个备份,从而避免了变量冲突,也就不会出现线程安全问题。
PHP 对多线程的封装保证了线程安全,程序员不用考虑对全局变量加各种锁来避免读写冲突了,同时也减少了出错的机会,写出的代码更加安全。
但由此导致的是,子线程一旦开始运行,主线程便无法再对子线程运行细节进行调整了,线程一定程度上失去了线程之间通过全局变量进行消息传递的能力。
同时 PHP 开启线程安全选项后,使用 TSRM 机制分配和使用变量时也会有额外的损耗,所以在不需要多线程的 PHP 环境中,使用 PHP 的 ZTS (非线程安全) 版本就好。
类和方法
PHP 将线程 封装成了 Thread 类,线程的创建通过实例化一个线程对象来实现,由于类的封装性,变量的使用只能通过构造函数传入,而线程运算结果也需要通过类变量传出。
下面介绍几个常用的 Thread 类方法:
run():此方法是一个抽象方法,每个线程都要实现此方法,线程开始运行后,此方法中的代码会自动执行;
start():在主线程内调用此方法以开始运行一个线程;
join():各个线程相对于主线程都是异步执行,调用此方法会等待线程执行结束;
kill():强制线程结束;
isRunning():返回线程的运行状态,线程正在执行run()方法的代码时会返回 true;
因为线程安全的实现,PHP 的多线程开始运行后,无法再通过共享内存空间通信,线程也无法通过线程间通信复用,所以我认为 PHP 的“线程池”并没有什么意义。扩展内自带的Pool 类是一个对多线程分配管理的类,这里也不再多介绍了。
以上就是php不支持多线程怎么办的详细内容,更多请关注php交流群:link

相关文章
PHP如何支持CURL字符串证书传输
PHP如何支持CURL字符串证书传输 背景最近在对接微信支付的时候,需要在退款处用到证书,由于我们是SAAS平台,要支持多方多渠道支付,如果把所有证书文件保存在应用服务器会受到SLB的影响,会导致某台机器文件不同步而阻碍退款流程,但把文件存在OSS的话,后端又要从OSS下载到应用服务器来保证一致性。
1669 0
|
13天前
|
消息中间件 缓存 监控
在PHP中,实现多线程
在PHP中,实现多线程
33 6
|
6月前
|
安全 Java 编译器
深入理解PHP 8.0新特性及其对开发的影响Java中的多线程编程:从理论到实践
【5月更文挑战第27天】在这篇文章中,我们将详细探讨PHP 8.0的新特性以及它们如何影响开发者的工作流程。我们将深入研究这些新特性,包括JIT编译器,联合类型,命名参数,以及更多的错误处理机制。我们还将讨论这些新特性如何提高代码的可读性和性能,以及它们如何改变我们编写和维护PHP应用程序的方式。 【5月更文挑战第27天】在现代计算机科学中,多线程编程是一个重要的概念,它允许多个线程在同一时间内运行,从而提高了程序的效率和性能。本文将深入探讨Java中的多线程编程,包括其理论基础,实现方法,以及一些常见的问题和解决方案。我们将通过实例来理解如何创建和管理线程,以及如何使用Java的并发工具来
|
安全 PHP
如何使用PHP实现多线程操作?
如何使用PHP实现多线程操作?
299 0
|
PHP 调度
浅谈 实现php多线程
浅谈 实现php多线程
|
安全 前端开发 应用服务中间件
centos 下配置 nginx 支持 php
centos 下配置 nginx 支持 php
|
安全 PHP
PHP多线程
1、扩展下载链接:https://windows.php.net/downloads/pecl/releases/pthreads 2、php扩展安装:pthreads a)注意事项: i.Php必须是线程安全的版本(TS),可以在phpinfo中查看
|
存储 消息中间件 NoSQL
PHP 基于 SW-X 框架,搭建RPC微服务支持
SW-X的微服务也可用于优化FPM业务,底层使用了TCP通讯协议,支持基于AES的数据加解密支持,官方提供了Swoole/FPM下的RPC客户端,并提供了纯基于Redis存储管理的RPC服务中心。
|
测试技术 网络性能优化 PHP
simps/mqtt v1.1.2 版本发布,首个支持 MQTT v5.0 协议的 PHP library
在此版本中支持了 auth 类型和上个版本中未支持属性,这也意味着 MQTT v5.0 的协议已经支持完毕,后面的版本也就剩下 Bug 修复和代码优化了
347 0
下一篇
无影云桌面