当前位置:首页 > PHP问题 > 正文内容

php不支持多线程怎么办【php问题】,php,多线程

搜教程4年前 (2019-11-27)PHP问题157

PHP 默许并不支撑多线程,要运用多线程须要装置 pthread 扩大,而要装置 pthread 扩大,必需运用 --enable-maintainer-zts 参数从新编译 PHP,这个参数是指定编译 PHP 时运用线程平安体式格局。

引荐:php服务器

线程平安

多线程是让顺序变得不安本分的一个要素,在运用多线程之前,首先要斟酌线程平安题目:

线程平安:线程平安是编程中的术语,指某个函数、函数库在多线程环境中被挪用时,可以准确地处置惩罚多个线程之间的同享变量,使顺序功用准确完成。

在传统多线程中,由于多个线程同享变量,所以可能会致使涌现以下题目:

  1. 存在一个全局数组$arr = array('a');;

  2. A线程猎取数组长度为1;

  3. B 线程猎取数组长度为1;

  4. A 线程 pop 出数组元素 $a = array_pop($arr); $a = 'a';;

  5. B 线程也 pop 数组元素 $b = array_pop($arr); $a = null;;

  6. 此时 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不支撑多线程怎么办的细致内容,更多请关注ki4网别的相干文章!

扫描二维码推送至手机访问。

版权声明:本文由搜教程网发布,如需转载请注明出处。

本文链接:https://www.sojiaocheng.cn/13476.html

标签: php多线程
分享给朋友:

“php不支持多线程怎么办【php问题】,php,多线程” 的相关文章

11个发问频次最高的php面试题【php问题】,php,php面试题

11个发问频次最高的php面试题【php问题】,php,php面试题

你是不是正在预备寻觅一份PHP开辟的事情,而且也在寻觅一些关于PHP的口试题及答案?本文为人人分享了一些被发问频次最高的11个PHP口试题,以及对应的通例回覆,每一个公司都有本身的口试规范,口试和题目是完整取决于你在事情中所饰演的角色,固然也和你的编程妙技息息相关。  题目:请用最简朴...

为何网页cookies用了曲奇饼干这个词?【php问题】,php,php cookies

为何网页cookies用了曲奇饼干这个词?【php问题】,php,php cookies

这个名称是UNIX操纵体系的“magic cookie”的简称。   “magic cookie”1994年已被顺序猿Lou Montulli用于盘算时的网络通信   而“magic cookie”,是在顺序中交换的一个令牌或许短报文数据。使用它的Web开发人员,能够协助用户浏览他们的网站,...

php array_values函数怎样用【php问题】,php array_values

php array_values函数怎样用【php问题】,php array_values

php array_values函数返回数组的一切值(非键名),其语法是array_values(array),参数array必须,指划定数组。 php array_values函数怎样用? 作用:返回数组的一切值(非键名) 语法: array_values(array) 参数:...

php date_default_timezone_set函数怎样用【php问题】,php,date_default_timezone_set函数

php date_default_timezone_set函数怎样用【php问题】,php,date_default_timezone_set函数

date_default_timezone_set()函数是PHP中的内置函数,用于设置剧本中所有日期/时候函数运用的默许时区。假如时区无效,则此函数返回False,不然返回True。 php date_default_timezone_set()函数怎样用? php date_de...

php move_uploaded_file函数怎样用【php问题】,php,move_uploaded_file函数

php move_uploaded_file函数怎样用【php问题】,php,move_uploaded_file函数

move_uploaded_file() 函数用于将上传的文件挪动到新位置,语法为move_uploaded_file(file,newloc),假如 file 不是正当的上传文件,不会涌现任何操纵,将返回 false。 php move_uploaded_file()函数怎样用? 作用...

php stripslashes函数怎样用【php问题】,php,stripslashes函数

php stripslashes函数怎样用【php问题】,php,stripslashes函数

stripslashes()函数是PHP中的一个内置函数,语法为stripslashes(string),用于删除字符串中的反斜杠。该函数可用于清算从数据库中或许从 HTML 表单中取回的数据。 php stripslashes()函数怎样用? stripslashes()函数用于删除字...