PHP pthread expansion usage and pitfalls
PHP was born for WEB development. In the past, PHP did not have threads until the emergence of pthread, which increased the vitality of PHP;
Recommended: "PHP Tutorial"
1. Creation and use of threads
1. Thread class
Basic creation and use:
<?php //通过继承Thread类来实现自己的线程类MyThread class MyThread extends Thread{ //重写构造函数 function __construct(){ } //重写run方法(运行的是子线程需要执行的任务) function run(){ } } //对象的实例化和运行就和java一样 $mt = new MyThread(); $mt->start();
Of course, as a thread class, there must be other methods for querying thread status and managing threads
<?php //获取创建线程的父线程id Thread::getCreatorId //获取当前线程id Thread::getCurrentThreadId //获取当前线程引用 Thread::getCurrentThread //将线程加入检测 Thread::join //查看线程是否被检测(是否被join) Thread::isJoined //强行杀死线程 Thread::kill
2. Worker class
The parent class of the Worker class is the Thread class, so the basic usage is the same as Thread. Compared with the Thread class, the Worker class adds the function of thread reuse (to reduce the resources consumed by creating and destroying threads). It is usually used in conjunction with the Stackable class, which means that the worker class can be used as a thread or a task. Container to use, such as:
<?php class Task extends Stackable{ function __construct($no){ $this->no = $no; } function run(){ echo "task{$this->no}:run".PHP_EOL; } } class MyWork extends Worker{ function __construct(){ } function run(){ } } $t1= new Task(1); $t2= new Task(2); $t3= new Task(3); $my = new MyWork(); $my->stack($t1); $my->stack($t2); $my->start(); $my->stack($t3);
Final output:
task1:run task2:run task3:run
Of course, the Worker class has other methods for the parent thread to manage it
//获取还没执行的任务数量 Worker::getStacked //判断worker是否关闭 Worker::isShutdown //判断worker是否在工作 Worker::isWorking //关闭销毁worker Worker::shutdown //将任务压栈 Worker::stack //将任务出栈(该api有问题,慎用) Worker::unstack
2. Some problems and points of attention encountered by PHP threads
1. The attributes of the thread class cannot directly perform hash table (array) operations, such as:
//这样是无效的 $this->var1["hello"] = "world"; //改为 $this->var1 = ["hello"=>"world"];
Why? Because the assignment of thread class attributes is implemented through serialization, its essence is to store serialized data, so the common direct operation of PHP's hash table (array) is not supported.
2. The attribute of the thread class cannot be a "closure function"
Reason: The closure function cannot be serialized; therefore, if you want to use a "callback function" in a thread, then Give up the thread;
3. The thread object opens up the second space of PHP
(1) After the thread is created, it cannot access the variables of the parent thread, such as $GLOBALS or global. Neither can operate the global variables of the parent thread, which should take into account thread safety issues;
(2) However, the parent thread can access the contents of the child thread object;
The above is the detailed content of PHP pthread expansion usage and pitfalls. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

To work on file upload we are going to use the form helper. Here, is an example for file upload.

Validator can be created by adding the following two lines in the controller.

Logging in CakePHP is a very easy task. You just have to use one function. You can log errors, exceptions, user activities, action taken by users, for any background process like cronjob. Logging data in CakePHP is easy. The log() function is provide

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

CakePHP is an open source MVC framework. It makes developing, deploying and maintaining applications much easier. CakePHP has a number of libraries to reduce the overload of most common tasks.
