资讯专栏INFORMATION COLUMN

php 多线程pthreads官网翻译

heartFollower / 2161人阅读

摘要:它包含了你创建多线程应用的全部工具,当然无论是还是控制台程序。任何想要应用在程序里面的多线程应用必须都是继承于这几个实用类以上版本取消了类。

不分享,做一切!

php拥有令人敬畏的且数量庞大的扩展跟特征,但是php当初设计这门语言的时候,是因为那个时候的web网站远远没有今天的强大!现在几乎所有的网站(含手机站)服务器都是多核的,如果不是多CPU跟多核,PHP是无法提供更好的服务的。虽然PHP正在非常迅速的展示及表达你的想法,但是当我们想要通过成熟的语言或者框架,建设更加完善的网页应用(网站)或者是数据库驱动的应用,因为PHP不能够让我们更好的支配硬件服务器。所以比较尴尬!但是多线程让PHP创建更完善【牛叉】的应用成为可能,这个特征是的你的个人网站能够做到一些以前不能够做到的事情!

基础

pthreads 扩展是一个专有的API,它可以让用户在PHP语言里面使用多线程。它包含了你创建多线程应用的全部工具,当然无论是web、还是控制台程序。
PHP程序可以创建、读取、写入及同步线程操作,含如下类型:Threads、Workers、Stackables【翻译者注释:V2 以上的版本 同 Threaded】。

Thread对象

用户可以通过继承Thread类来使用线程,当然这个类是通过pthreads拓展实现的。任何成员【函数/代码段/继承者】都可以通过引入线程类来读取及重写这个线程类的方法。任何继承于线程的程序,都可以执行任何的公开的及受保护的线程程序。当我们在程序中调用线程类里面的start方法的时候,线程类【继承线程类的子类】中的run方法将会作为一个独立的线程被执行。只有当上下文程序创建一个线程,并且开启start方法及join方法的时候。【翻译者注释:如果使用join 就是等待上一个线程结束,然后执行下一个线程,官方给的说明是同步】

Worker对象

Worker线程拥有持久的稳定性,表现在当这个线程创建及开启后是一直可用的,除非这个线程的引用超出了范围,也就是线程实例消失了。或者主动调用shutdown方法关闭了。任何在程序中使用Worker类及子类实例化的对象,当程序独立运行为一个独立线程时,这个Worker里面的run方法相对与存在Worker对象栈里面的其它程序,run方法将最先被调用。这样的话,这个run方法就可以用来初始化一些资源,方便后面栈中程序调用。【翻译者注释:注意在Workder对象里面stack方法内调用的其它线程的实例化会被执行,但是不是多带带产生新的线程。只有Worker此时会多带带产生线程,因为并没有调用其它线程的start方法】【脚本执行完成,这个Worker也会挂掉的。】

Stackable对象

栈排序【Stackable】对象在运行run方法期间可以读写及执行Worker线程,此外,任何继承于Stackable线程的子程序或者程序段,都可以读写或者执行它的自己的方法在线程执行前或者执行后。【翻译者注释:应该跟 Worker线程里面的 Stack相关吧。因为在最新的里面pthreads v3版本里面的没有Stackable类了,相关可以替换的应该是 threaded 类,感觉 threaded是最大的基类,然后 thread是子类,然后worker是 thread的子类】

同步

所有的pthreads对象可以通过::wait()及::notify()方法来构建线程同步,在子程序【程序段】中调用::wait()方法将会让线程等待执行,当调用::notify()方法将会唤起::wait()方法继续执行线程。这样就可以允许强大的线程PHP线程同步。

等等,什么是Threaded对象?

其中 Stackable、Thread、Worker可以被认为是Threaded的子类,Threaded可以认为是标准基础类。所以上述的类都具备基类的全部属性及方法。

任何想要应用在程序里面的多线程应用必须都是继承于Stackable、Thread、Worker这几个实用类【v3 以上版本 取消了 Stackable类】。这也就意味这每个子类都会天然具备run方法,但是不一定使用它【翻译者注释:因为run方法是在threaded这个最大的基类里面的,当然每个子类都有了】。这个threaded类经常会被实例化来进行真正的程序运算。也就是说,任何线程子程序都可以运行threaded的成员属性及函数,在运行前、中、后时期。

方法修饰符

在pthreads线程扩展中的Threaded类中的受保护[protected]的方法,意味着同一时间内之内有一个线程调用这个方法。threaded类中私有[prvate]方法,意味着只能在线程运行中进行调用【也就是:创建该线程的对象调用】。【翻译者注释:默认的threaded类里面的方法都是public的,用户需要自己添加受保护和私有的方法】

数据存储

作为首要原则,任何可以被序列化的数据都可以作为类成员属性进行存储【翻译者注释:类似于定义了魔术方法,对不存在的属性进行存取】,它能够在子类实例化的任何位置进行读写操作。不是所有的数据都会被序列化的,基础的类型将会存储相应的真实表单中。复杂的类型,如数组 和对象【非线程对象】才会被序列化后存储。存储完成后,就可以在任何使用该线程的位置进行读取操作。
甚至如下特殊情况,就是线程对象作为另一个线程的成员属性时候被引用的时候,同样的数据读取特性是一样的。

资源

这些扩展跟函数在PHP定义【请求】了一定的被占用的资源,pthreads会提供线程之间的资源共享【连接使用】,但是这些资源将会产生问题,绝大多数时间,资源是不应该在不同的线程中间共享的,更应该像是流或者sockets的方式管理资源。一般情况下,资源持久占用是不被支持的。

进击的的扩展:
pthreads扩展试图获取一个完整的结果。它的局限性及特征将会随时改变。这个是非常自然的。它的这些局限性通常都是通过继承强加的,虽然都是处于善意。pthreads 的目标就是提供可用的、多任务的、任何级别的、PHP解决方案,在这样的环境下pthreads诞生了,一些限制非常的必要,就是为了给大家提供一个稳定的环境!请大家谅解!【翻译者注释:最后那句我加的!】

牛叉!

多线程官网:
http://pthreads.org/

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。互联网+时代,时刻要保持学习,携手千锋PHP,Dream It Possible。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22795.html

相关文章

  • Mac下安装pthread扩展

    摘要:简介是一组允许用户在中使用多线程技术的面向对象的。它提供了创建多线程应用所需的全套工具,无论是应用还是控制台应用。通过使用,以及对象,应用可以创建读取写入以及执行多线程应用,并可以在多个线程之间进行同步控制。 简介 pthreads 是一组允许用户在 PHP 中使用多线程技术的面向对象的 API。 它提供了创建多线程应用所需的全套工具,无论是 Web 应用还是控制台应用。 通过使用 T...

    hqman 评论0 收藏0
  • PHP线程(Pthread初探)

    摘要:饿了,没有力气写代码了。该对象有如下方法。五一再研究研究。。预定义常量线程的默认选项。线程开始的时候,扩展会将环境复制到线程上下文中。新线程开始时,仅继承配置。允许新线程向标准输出发送头信息通常情况下是被禁止的。 饿了,没有力气写代码了。马上五一来临。学一下多线程。pthread扩展的安装,就不说了。

    Zachary 评论0 收藏0
  • PHP 进阶之路 - 揭开 PHP 线程安全的神秘面纱

    摘要:如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。为解决线程的并发问题,引入了线程安全资源管理器。的全拼,用来存放各个线程的链表。 PHP 进阶之路 - 零基础构建自己的服务治理框架(上) PHP 进阶之路 - 零基础构建自己的服务治理框架(下) PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 PHP 进阶之路 - 亿级 pv 网站架构实战之性能压榨 注...

    pepperwang 评论0 收藏0

发表评论

0条评论

heartFollower

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<