<?php declare(strict_types=1); ini_set('display_errors', 'On'); error_reporting(-1); // 子线程任务函数 $task = static function (string $name, string $gender, int $age): void { if (class_exists('Human1')) { echo 'Human1类存在' . PHP_EOL; $human1 = new Human1($name, $gender, $age); $human1->profile(); } else { echo 'Human1类不存在' . PHP_EOL; } if (class_exists('Human2')) { echo 'Human2类存在' . PHP_EOL; $human2 = new Human2($name, $gender, $age); $human2->profile(); } else { echo 'Human2类不存在' . PHP_EOL; } }; // 启动子线程(1) $runtime1 = new parallel\Runtime(__DIR__ . '/Human1.class.php'); $runtime1->run($task, ['张三', '男', 18]); // 休眠3秒钟再启动一个子线程 sleep(3); echo '……(休眠3秒后)……' . PHP_EOL; // 启动子线程(2) $runtime2 = new parallel\Runtime(__DIR__ . '/Human2.class.php'); $runtime2->run($task, ['李四', '女', 17]); //========== 控制台输出·开始 ==========// // Human1.class.php >> 若看到这句话则说明子线程已引入Human1类 // Human1类存在 // Human1::profile() ☛ 俺叫张三(男),今年18岁。 // Human2类不存在 // ……(休眠3秒后)…… // Human2.class.php >> 若看到这句话则说明子线程已引入Human2类 // Human1类不存在 // Human2类存在 // Human2::profile() ☛ 俺叫李四(女),今年17岁。 //========== 控制台输出·结束 ==========// //========== 总结 ==========// // 1、parallel\Runtime()的效果和parallel\bootstrap()很像,都是引入一个PHP文件来初始化子线程的运行环境,不同点在于parallel\Runtime()是 // 针对单个子线程,而parallel\bootstrap()是针对所有子线程。 // 2、一般来说无脑使用parallel\bootstrap()即可,因为parallel\Runtime()更像是一次性用品,而并发编程恰恰要多次使用相同的子线程运行环境。
Copyright © 2024 码农人生. All Rights Reserved