这里有新鲜出炉的 PHP 教程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
PHP 可通过 PCNTL 扩展实现进程控制,如进程创建,信号处理,进程中断判断等。但只能在 CLI 模式下操作。PCNTL 的信号机制是基于 ticks 机制实现的。
PHP 使用 PCNTL 系列的函数也能做到多进程处理一个事务。比如我需要从数据库中获取 80w 条的数据,再做一系列后续的处理,这个时候,用单进程?你可以等到明年今天了。。。所以应该使用 pcntl 函数了。
下面我们来看个实例
代码
- <?php
- $arChildId = array();
- for($i = 0; $i < 10; $i++)
- {
- $iPid = pcntl_fork();
- if($iPid == -1)
- {
- die('can\'t be forked.');
- }
- if($iPid)
- {
- # 主进程逻辑
- $arChildId[] = $iPid;
- }
- else
- {
- # 子进程逻辑
- $iPid = posix_getpid(); # 获取子进程的ID
- $iSeconds = rand(5, 30);
- echo '* Process '. $iPid. ' was created, and Executed, and Sleep '. $iSeconds. PHP_EOL;
- excuteProcess($iPid, $iSeconds);
- exit();
- }
- }
- while(count($arChildId) > 0)
- {
- foreach($arChildId as $iKey=> $iPid)
- {
- $res = pcntl_waitpid($iPid, $status, WNOHANG);
- if($res == -1 || $res > 0)
- {
- unset($arChildId[$iKey]);
- echo '* Sub process: '. $iPid. ' exited with '. $status. PHP_EOL;
- }
- }
- }
- # 子进程执行的逻辑
- function excuteProcess($iPid, $iSeconds)
- {
- file_put_contents('./log/'.$iPid.'.log', $iPid.PHP_EOL, FILE_APPEND);
- sleep($iSeconds);
- }
- ?>
运行结果
- * Process 16163 was created,
- and Executed,
- and Sleep 11 * Process 16164 was created,
- and Executed,
- and Sleep 21 * Process 16165 was created,
- and Executed,
- and Sleep 24 * Process 16166 was created,
- and Executed,
- and Sleep 27 * Process 16167 was created,
- and Executed,
- and Sleep 8 * Process 16168 was created,
- and Executed,
- and Sleep 14 * Process 16169 was created,
- and Executed,
- and Sleep 14 * Process 16170 was created,
- and Executed,
- and Sleep 26 * Process 16171 was created,
- and Executed,
- and Sleep 20 * Process 16172 was created,
- and Executed,
- and Sleep 21 * Sub process: 16167 exited with 0 * Sub process: 16163 exited with 0 * Sub process: 16169 exited with 0 * Sub process: 16168 exited with 0 * Sub process: 16171 exited with 0 * Sub process: 16164 exited with 0 * Sub process: 16172 exited with 0 * Sub process: 16165 exited with 0 * Sub process: 16170 exited with 0 * Sub process: 16166 exited with 0
来源: http://www.phperz.com/article/17/0804/342347.html