PHP는 WEB 개발을 위해 탄생했습니다. 과거에는 pthread가 등장하기 전까지 PHP에는 스레드가 없었기 때문에 PHP의 활력이 높아졌습니다.
추천: "PHP 튜토리얼; #🎜 🎜#》
1. 스레드 생성 및 사용
1. 스레드 클래스기본 생성 그리고 Use:<?php //通过继承Thread类来实现自己的线程类MyThread class MyThread extends Thread{ //重写构造函数 function __construct(){ } //重写run方法(运行的是子线程需要执行的任务) function run(){ } } //对象的实例化和运行就和java一样 $mt = new MyThread(); $mt->start();물론 스레드 클래스로서 스레드 상태를 쿼리하고 스레드를 관리하기 위한 다른 방법이 있어야 합니다
<?php //获取创建线程的父线程id Thread::getCreatorId //获取当前线程id Thread::getCurrentThreadId //获取当前线程引用 Thread::getCurrentThread //将线程加入检测 Thread::join //查看线程是否被检测(是否被join) Thread::isJoined //强行杀死线程 Thread::kill2.Worker 클래스
# 🎜🎜#Worker 클래스의 상위 클래스는 Thread 클래스이므로 기본적인 사용법은 Thread와 동일합니다. Thread 클래스와 비교하여 Worker 클래스는 스레드 재사용 기능을 추가합니다(스레드 생성 및 소멸에 소요되는 리소스를 줄이기 위해). 일반적으로 Stackable 클래스와 함께 사용되므로 작업자 클래스를 스레드로 사용할 수 있습니다. 사용할 스레드 또는 작업 컨테이너(예:
<?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);
최종 출력:
task1:run task2:run task3:run
물론 Worker 클래스에는 상위 스레드가 이를 관리할 수 있는 다른 메서드가 있습니다.# 🎜🎜#
//获取还没执行的任务数量 Worker::getStacked //判断worker是否关闭 Worker::isShutdown //判断worker是否在工作 Worker::isWorking //关闭销毁worker Worker::shutdown //将任务压栈 Worker::stack //将任务出栈(该api有问题,慎用) Worker::unstack
2. PHP 스레드에서 발생하는 일부 문제 및 주의사항
1 스레드 클래스의 속성은 해시에 직접 사용할 수 없습니다. 테이블(배열) 연산(예:
//这样是无效的 $this->var1["hello"] = "world"; //改为 $this->var1 = ["hello"=>"world"];Why?) 스레드 클래스 속성 할당은 직렬화를 통해 구현되므로 그 본질은 직렬화된 데이터를 저장하는 것이므로 PHP의 해시 테이블(배열)에 대한 일반적인 직접 작업은 지원되지 않습니다. 2. 스레드 클래스의 속성은 "클로저 함수"일 수 없습니다. Reason: 따라서 "콜백을 사용하려는 경우 클로저 함수를 직렬화할 수 없습니다. 그렇다면 스레드를 포기하세요; 3. 스레드 객체는 PHP의 두 번째 공간을 엽니다 (1) 스레드가 생성된 후 , 상위 스레드의 변수에 액세스할 수 없습니다. $GLOBALS 또는 global과 같은 사용법은 상위 스레드의 전역 변수를 작동할 수 없습니다. (2) 그러나, 상위 스레드는 하위 스레드 객체의 내용에 액세스할 수 있습니다.
위 내용은 PHP pthread 확장 사용법과 함정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!