Heim > Artikel > Backend-Entwicklung > Verwendung und Fallstricke der PHP-Pthread-Erweiterung
PHP wurde für die WEB-Entwicklung geboren, bis PHP aufkam, was PHP mehr Lebendigkeit verlieh.
Empfohlen: "PHP-Tutorial"
1. Erstellung und Verwendung von Threads
1. Thread-Klasse
Grundlegende Erstellung und Verwendung:
<?php //通过继承Thread类来实现自己的线程类MyThread class MyThread extends Thread{ //重写构造函数 function __construct(){ } //重写run方法(运行的是子线程需要执行的任务) function run(){ } } //对象的实例化和运行就和java一样 $mt = new MyThread(); $mt->start();
Natürlich, wie eine Thread-Klasse, es muss andere Methoden zum Abfragen des Thread-Status und zum Verwalten von Threads geben
<?php //获取创建线程的父线程id Thread::getCreatorId //获取当前线程id Thread::getCurrentThreadId //获取当前线程引用 Thread::getCurrentThread //将线程加入检测 Thread::join //查看线程是否被检测(是否被join) Thread::isJoined //强行杀死线程 Thread::kill
2. Worker-Klasse
Die übergeordnete Klasse der Worker-Klasse ist die Thread-Klasse, daher ist die grundlegende Verwendung das gleiche wie Thread. Im Vergleich zur Thread-Klasse fügt die Worker-Klasse die Funktion der Thread-Wiederverwendung hinzu (um den Ressourcenverbrauch durch das Erstellen und Zerstören von Threads zu reduzieren). Sie wird normalerweise in Verbindung mit der Stackable-Klasse verwendet, was bedeutet, dass die Worker-Klasse als verwendet werden kann Thread oder eine zu verwendende Aufgabe, wie zum Beispiel:
<?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);
Endgültige Ausgabe:
task1:run task2:run task3:run
Natürlich verfügt die Worker-Klasse über andere Methoden für den übergeordneten Thread, um ihn zu verwalten
//获取还没执行的任务数量 Worker::getStacked //判断worker是否关闭 Worker::isShutdown //判断worker是否在工作 Worker::isWorking //关闭销毁worker Worker::shutdown //将任务压栈 Worker::stack //将任务出栈(该api有问题,慎用) Worker::unstack
2. Einige Probleme und Aufmerksamkeitspunkte, auf die PHP-Threads stoßen
1. Die Attribute der Thread-Klasse können keine Hash-Tabellen-(Array-)Operationen direkt ausführen, wie zum Beispiel:
//这样是无效的 $this->var1["hello"] = "world"; //改为 $this->var1 = ["hello"=>"world"];
Warum? Da die Zuweisung von Thread-Klassenattributen durch Serialisierung implementiert wird, besteht ihr Kern darin, serialisierte Daten zu speichern, sodass die allgemeine direkte Operation der Hash-Tabelle (Array) von PHP nicht unterstützt wird.
2. Das Attribut der Thread-Klasse kann keine „Abschlussfunktion“ sein
Grund: Die Abschlussfunktion kann daher nicht serialisiert werden, wenn Sie eine „Callback-Funktion“ verwenden möchten Thread, dann Gib den Thread auf;
3. Das Thread-Objekt öffnet den zweiten Bereich von PHP
(1) Nachdem der Thread erstellt wurde, kann er nicht auf die Variablen des übergeordneten Threads zugreifen , wie $GLOBALS oder global, können die globalen Variablen des übergeordneten Threads nicht bedienen, was Thread-Sicherheitsprobleme berücksichtigen sollte. (2) Der übergeordnete Thread kann jedoch auf den Inhalt des untergeordneten Threads zugreifen Objekt;
Das obige ist der detaillierte Inhalt vonVerwendung und Fallstricke der PHP-Pthread-Erweiterung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!