В этой статье описаны некоторые подводные камни и моменты, на которые следует обратить внимание при использовании PHP threads V3 с примерами. Подробности заключаются в следующем:
1. Дочерний поток не может получить доступ к глобальным переменным родительского потока, но родительский поток может получить доступ к переменным дочернего потока
Результаты заключаются в следующем
2. Дочерний поток не может изменять переменную родительского потока
data = $data; } public function run() { echo "task data : ", $this->data, "\n"; $this->data = 'def'; echo "task data : ", $this->data, "\n"; } } $data = 'abc'; //What we pass in here is a reference $t = new Task($data); $t->start() && $t->join(); //But the $data variable doesn't change //This means that the $data we pass in to the task object through the constructor is just a copy //Variables in the main thread cannot be manipulated in a child thread var_dump($data);
Результаты заключаются в следующем
3, Версия Pthreads V3 может устанавливать участников в качестве анонимных функций
call = function ($param1, $param2) { echo "task call param1 : {$param1} param2 : {$param2}\n"; }; } public function run() { //Calling member anonymous functions directly ($this->call)("hello", "world"); } } $t = new Task(); $t->start() && $t->join();
Результаты заключаются в следующем
4. Для ресурсов подключения к базе данных нам необходимо объявить их статическими членами
db = new PDO('mysql:dbname=test;host=192.168.33.226', 'root', ''); } public function run() { $result = $this->db->query("select id,name from tb_user"); while ($row = $result->fetch(PDO::FETCH_ASSOC)) { echo "{$row['id']}\t{$row['name']}\n"; } } } $t = new Task(); $t->start() && $t->join();
Результаты заключаются в следующем
Код изменяется следующим образом:
query("select id,name from tb_user"); while ($row = $result->fetch(PDO::FETCH_ASSOC)) { echo "{$row['id']}\t{$row['name']}\n"; } } } $t = new Task(); $t->start() && $t->join();
Результаты заключаются в следующем
Наконец, некоторые из вышеперечисленных проблем не возникнут, если мы не исключим обновление более поздней версии pthreads.
Моя версия PHP-7.2.4, а версия pthreads-3.1.7 dev
Для получения дополнительной информации о PHP читатели, интересующиеся этим сайтом, могут ознакомиться со следующими темами: краткое описание навыков работы с процессами и потоками PHP, краткое описание навыков сетевого программирования PHP, вводный курс базового синтаксиса PHP, полная коллекция навыков работы с массивами PHP, краткое описание использования строк PHP “Руководство по работе с базой данных PHP + MySQL” и “Краткое описание навыков работы с общей базой данных PHP”
Я надеюсь, что эта статья будет полезна для программирования на PHP.