当前位置: 首页 > 后端技术 > PHP

php多线程pthreads官网翻译

时间:2023-03-30 02:34:59 PHP

不分享,做一切!PHP拥有令人敬畏的大量扩展和功能,但是当PHP最初被设计为一种语言时,那是因为当时的网络远没有今天强大!现在几乎所有的网站(包括手机网站)都有多核服务器。如果不是多CPU、多核,PHP无法提供更好的服务。虽然PHP展示和表达你的想法的速度非常快,但是当我们想要通过成熟的语言或框架构建更完整的Web应用程序(网站)或数据库驱动的应用程序时,因为PHP无法让我们更好地支配硬件服务器。所以比较尴尬!但是多线程使得PHP可以创建更完整的[oxfork]应用程序。这个特点就是你的个人网站可以做到以前做不到的事情!基本的pthreads扩展是一个专有的API,允许用户在PHP语言中使用多线程。它包含创建多线程应用程序所需的所有工具,无论是Web程序还是控制台程序。PHP程序可以创建、读取、写入和同步线程操作,包括以下类型:Threads、Workers、Stackables【译者注:V2以上版本与Threaded相同】。Thread对象的用户可以通过继承Thread类来使用线程。当然这个类是通过pthreads的扩展来实现的。任何成员[函数/代码段/继承者]都可以通过引入线程类来读取和重写该线程类的方法。任何从线程继承的程序都可以执行任何公共和受保护的线程程序。当我们在程序中调用线程类中的start方法时,线程类中的run方法【继承线程类的子类】就会作为一个独立的线程执行。只有上下文程序创建线程时,才开启start方法和join方法。【译者注:如果使用join等待上一个线程结束,再执行下一个线程,官方描述是同步的】Worker对象Worker线程具有持久稳定性,体现在它总是在创建并启动线程后可用。是的,除非对该线程的引用超出范围,即线程实例消失。或者主动调用shutdown方法关闭。程序中任何使用Worker类及其子类实例化的对象,当程序作为一个独立的线程独立运行时,相对于Worker对象栈中存储的其他程序,该Worker中的run方法将首先被调用。在这种情况下,可以使用这个run方法来初始化一些资源,方便后续程序在栈中的调用。[译者注:注意在Worker对象的stack方法中调用的其他线程的实例化会被执行,但不会单独产生新的线程。此时只有Worker会独立产生线程,因为没有调用其他线程的start方法]【脚本执行完毕,这个Worker也会挂掉。】Stackable对象堆栈排序【Stackable】对象在run方法中可以读写和执行Worker线程。此外,任何继承自Stackable线程的子程序或程序段都可以在线程执行前或执行后读取、写入或执行自己的方法。【译者注:应该和Worker线程中的Stack有关。因为最新的pthreadsv3版本中没有Stackable类,相关的替换应该是threaded类。感觉threaded是最大的基类,然后thread是子类,然后worker是thread的子类]同步所有pthreads对象可以使用::wait()和::notify()方法构造线程同步。在子程序[程序段]中调用::wait()方法会使线程等待执行。当调用::notify()方法时会调用::wait()方法继续线程的执行。这允许PHP线程的强线程同步。等等,什么是Threaded对象?其中Stackable、Thread、Worker可以认为是Threaded的子类,Threaded可以认为是一个标准的基础类。所以上面的类拥有基类的所有属性和方法。任何多线程的应用,想要在程序中应用,都必须继承Stackable、Thread、Worker这些实用类【Stackable类在v3以上的版本被取消】。这也意味着每个子类自然会有一个run方法,但不一定会用到[译者注:因为run方法在threaded最大的基类中,当然每个子类都有]。这个线程类经常被实例化以执行真正的程序操作。也就是说,任何线程子程序都可以在执行前、执行中和执行后执行线程成员属性和函数。method修饰符是pthreads线程扩展中Threaded类中的protected[protected]方法,表示一个线程同时调用该方法。threaded类中的private[prvate]方法意味着只能在线程运行时调用[即:创建线程的对象调用]。【译者注:默认线程类中的方法是public的,用户需要自己添加protected和private方法】数据存储是第一原则,任何可以序列化的数据都可以存储为类成员属性【译者注:类似于定义访问不存在属性的魔术方法],它可以在实例化子类的任何位置进行读写操作。并不是所有的数据都会被序列化,底层类型会以对应的真实形式存储。复杂类型,如数组和对象[非线程对象]将被序列化和存储。存储完成后,可以在使用线程的任何地方执行读取操作。即使在以下特殊情况下,当一个线程对象作为另一个线程的成员属性被引用时,相同的数据读取特性是相同的。Resources这些扩展和函数定义了PHP中[请求]某些占用的资源,pthreads会提供线程间的资源共享[连接和使用],但是这些资源会产生问题。大多数时候,资源不应该在不同的线程之间共享,它应该像流或套接字一样管理资源。一般不支持资源持久化。激进的扩展:pthreads扩展试图获得完整的结果。其限制和功能可能会发生变化。这是很自然的。它的这些限制通常是通过继承施加的,尽管是出于善意。pthreads的目标是在任何级别提供可用的多任务PHP解决方案。在这样的环境下,pthreads诞生了。有些限制是非常有必要的,只是为了给你提供一个稳定的环境!敬请谅解!【译者注:最后一句是我加的!】牛叉!多线程官网:http://pthreads.org/版权归作者所有。商业转载请联系作者授权,非商业转载请注明出处。互联网+时代,我们要时刻保持学习,携手前锋PHP,DreamItPossible。