简介

pthreads 是一组允许用户在 PHP 中使用多线程技术的面向对象的 API。

它提供了创建多线程应用所需的全套工具。

通过使用 Thread, Worker 以及 Threaded 对象,PHP 应用可以创建、读取、写入以及执行多线程应用,并可以在多个线程之间进行同步控制。

Warning

不可以在 web 服务器环境中使用 pthreads 扩展,

PHP 多线程开发仅限于命令行模式的应用。

Warning

只能在 PHP 7.2+ 版本中使用 pthreads (v3) 扩展,

在 PHP 7.0 和 7.1 版本中,ZTS 模式是不安全的。

Threaded 对象:

Threaded 对象提供支持 pthreads 操作的基本功能,包括同步方法以及其他对程序员很有帮助的接口。

Thread 对象:

通过继承 pthreads 中提供的 Thread 对象并实现 run 方法,用户可以创建自己的 Thread 对象。

只要线程上下文中持有某个 Thread 对象的引用,就可以读/写该对象的属性,也可以调用该对象的公有(public)或者受保护(protected)的方法。

当在创建 Thread 对象的上下文中调用该对象的

Worker 对象:

Worker 是有状态的线程对象,它在线程开始(通过调用 run 方法会在它的栈中入栈对象之前执行,这样就可以进行一些必需的资源初始化工作。

Pool 对象:

Pool 对象是 Worker 线程对象池,可以用来在多个 Worker 对象之间分发 Threaded 对象,

这是最易用且高效的多线程编程方式。

Caution

Pool 是标准的 PHP 对象,它并没有继承 Threaded 类,所以不可以在多个线程上下文中共享同一个 Pool 对象。

Volatile 类是在 pthreads v3 中新增加的,

用来表示可变的 Threaded 类中的

Threaded 属性(默认情况下是不可变的)。

它也可以被用来在 Threaded 上下文中存储数组。

线程间同步:

由 pthreads 扩展创建的所有对象拥有内置的线程间同步机制,

和 Java 语言很类似,

使用 Threaded 对象提供了强有力的线程间同步控制机制。

Caution

应用中会用在多线程场景中的对象都应该从 Threaded 类继承。

数据存储:

一般来说,任何可以序列化的数据类型都可以作为 Threaded 对象的属性,它可以从持有该对象引用的任何线程上下文读/写。

并不是所有的数据都采用序列化方式存储,比如基本类型就是以其真实形态存储的。

对于不是 Threaded 派生的对象,例如复杂类型、数组以及对象等,都是序列化存储的,可以从持有 Threaded 对象引用的任何线程上下文中读取和写入,

区别就在于对于 Threaed 的派生对象,设置它的成员变量的过程是在独立线程上下文中执行的。

对于 Threaded 派生对象,在同一时间,不同的线程上下文都可以从该对象中读取到同样的数据。

静态成员:

当创建新的线程上下文(Thread 或 Worker 对象)的时候,静态成员会被拷贝到新的上下文中。出于安全考虑,资源类型以及包含内部状态的对象类型的静态成员会被置空。

实际上这个特性实现了类似线程本地存储的功能。举例说明,假设某个类拥有包含数据库连接信息以及数据库连接对象静态成员,

那么当新的线程上下文启动的时候,仅有数据库连接信息会被复制到新上下文中,而数据库连接对象并不会被复制。

所以,需要在新的上下文中根据复制过来的数据库连接基本信息来初始化数据库连接对象,新创建的数据库连接对象是独立的,

不影响在原上下文中的数据库连接对象。

Caution

当使用 print_r, var_dump 或者其他函数来进行对象调试的时候,是没有递归保护机制的。

Note:

资源类型:

PHP 中很多使用到 Resource 资源类型的扩展或函数并未针对多线程场景进行特殊设计,也就是说,虽然 pthreads 扩展提供了

在多个线程上下文中共享资源类型变量的能力,但是通常来说,你应该把它们视为非线程安全的。

所以,如果要在多个线程上下文中共享资源类型的变量,你应该特别谨慎对待。

Caution

为了提供一个稳定的运行环境,pthreads 扩展在执行过程中会有一些必需的额外限制。

php怎么写官网,PHP - Manual: 简介 (官方文档)相关推荐

  1. Win10安装版(非GHOST)_Win10 64位正式版(精致优化)V2019 - Win10专业版下载_win10专业版官网_Win10最新版官网下载 - W10之家

    Win10安装版(非GHOST)_Win10 64位正式版(精致优化)V2019 - Win10专业版下载_win10专业版官网_Win10最新版官网下载 - W10之家 http://www.w10 ...

  2. vnc官网下载,vnc官网下载教程图解

    VNC [ Virtual Network Computing ]是一款优秀的远程控制工具软件,由著名的AT&T的欧洲研究实验室开发的.VNC是在基于UNIX和Linux操作系统的免费的开放源 ...

  3. Vue2官网使用及简介

    官网地址 中文官网地址:https://cn.vuejs.org/      英文官网地址:https://vuejs.org/ 文档使用 Vue定义 一套用户构建用户界面的渐进式JavaScript ...

  4. 有意思的一些免费API接口整理,包含官网地址以及简介

    1.文档上的小牌子 官网:https://shields.io/ 举例:获取vue 在npm上的版本号 https://img.shields.io/npm/v/vue.svg?sanitize=tr ...

  5. Vue3官网使用及简介

    Vue3带来了什么 性能的提升 打包大小减少41% 初次渲染快55%,更新渲染快133% 内存减少54% - 源码的升级 使用Proxy代替defineProperty实现响应式 重写虚拟DOM的实现 ...

  6. html制作小米官网代码,仿小米官网(html+js+css)

    [实例简介] 学习前端知识时写的一个仿小米官网的一些页面+css样式+js验证代码 [实例截图] [核心代码] 小米官网(高仿) └── xiaomi ├── css_1 │   ├── financ ...

  7. python官网下载速度慢-python 官网慢

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! python是一门语言,有语法等规范. 但是落实到具体实现上,就不一样了. 用c实 ...

  8. CSS_腾讯QQ官网,新浪官网,网易官网,淘宝官网之css初始化代码

    CSS为什么要初始化?建站老手都知道,这是为了考虑到浏览器的兼容问题,其实不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面差异.当然,初始化样式会对SEO有一定的影 ...

  9. 【简要探究:Apple官网 (1)】苹果官网使用的模糊效果

    简要分析一下,苹果官网使用的模糊效果,它如何实现,又为什么要这么写 下面是官网的该功能实现的CSS, 可以看到,实现动态模糊效果使用了3行CSS. #** {-webkit-backdrop-filt ...

最新文章

  1. UI设计培训技术分享:配色秘籍
  2. linux学习治疗,这时代,医生都用VR帮你看病了!
  3. debian android环境搭建,Debian类系统环境变量的配置
  4. JS--切换图片总结
  5. XML中需要转义的字符
  6. 关于OpenMesh在Vs2008下编译与安装
  7. centons7网卡配置文件使用openvswitch bridge
  8. mysql可连接_mysql开启远程可连接
  9. 文件系统管理 之 文件和目录访问权限设置
  10. android adb音频采集,android adb
  11. 零基础学前端,自学还是培训机构?
  12. java打雪仗,【UER #8】打雪仗 - 题目 - Universal Online Judge
  13. CCF 期刊、会议 推荐目录
  14. KVM-QEMU的vCPU调度算法与Xen Credit算法对比分析
  15. 使用谷歌学术找到引用某篇英文论文的中文文献
  16. Goole helper使用
  17. 厦大C语言上机1378
  18. 《15个提高Google搜索的技巧》
  19. 民间祖传秘方 (转载)
  20. bat文件开启mysql服务器,bat文件启动mysql服务器

热门文章

  1. SAP Freestyle UI5 和 SAP Fiori Elements 应用的区别
  2. Rxjs merge 学习笔记
  3. Angular 里 unknown 和 any 的区别
  4. 感谢CSDN赠送的2021年新年礼物
  5. SAP Spartacus User form通过label标签的实现原理
  6. 如何访问SAP Spartacus里的config数据
  7. SAP Spartacus 中 Angular json pipe 的工作原理
  8. Angular应用里使用HTTP服务的一个具体例子
  9. 一个中年程序员遇到突发情况的一些胡言乱语
  10. com.fasterxml.jackson将对象序列化成json时,出现在json里的属性名称是怎么来的