日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

PHP并发技术

發(fā)布時(shí)間:2025/3/15 php 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP并发技术 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
主要是pcntl和popen高負(fù)載處理--“三劍客”:緩存、緩沖、并發(fā)
1.使用PCNTL擴(kuò)展:process control主要使用pcntl_fork函數(shù)和pcntl_waitpid函數(shù)<?php
function performSomeFunction($n, &$ret){
$pid = getmypid();
echo "this is in {$pid}.{$n}\n";
usleep(500000);
$ret[$pid] = array($pid);
exit(0);
}
$i = 0;
$starttime = microtime(TRUE);
$pid_arr = array();
$ret_arr = array();
$num = intval($argv[1]);
echo $num."\n";
while ($i < $num)
{
$pid = pcntl_fork();
if ($pid == -1)
{
die('could not fork');
}
else
{
if ($pid) // parent
{
$pid_arr[$i] = $pid;
}
else // child
{
performSomeFunction($i+1, $ret_arr);
}
}
$i++;
}

while(count($pid_arr) > 0)
{
$myId = pcntl_waitpid(-1, $status, WNOHANG);
foreach ($pid_arr as $key => $pid)
{
if ($myId == $pid)
unset($pid_arr[$key]);
}
usleep(100);
}

$elapsed = microtime(TRUE) - $starttime;
print "\n==> total elapsed: " . sprintf("%f secs.\n", $elapsed);
?>

注明:pcntl_fork(手冊(cè)介紹:http://php.net/manual/en/function.pcntl-fork.php)起進(jìn)程起來并發(fā)處理,然后底層做了測(cè)試,效果也還不錯(cuò),但是當(dāng)通過apache調(diào)用的時(shí)候卻無法運(yùn)行。然后看到了pcntl_fork手冊(cè)有下面一句:It is not possible to use the function 'pcntl_fork' when PHP is used as Apache module. You can only use pcntl_fork in CGI mode or from command-line.
2.使用popenpopen打開進(jìn)程文件指針<?php
$num = intval($argv[1]);
$i = 0;
$retArr = array();
$generateNumberArr = array();
while ($i++ < $num) {
$generateNumberArr[$i] = popen("/home/users/gino/apps/php5/bin/php /home/users/gino/test/pcntl/one.php " .$i, 'r');
}

foreach ($generateNumberArr as $generateNumberArr_k =>$generateNumberArr_v) {
$str = '';
while (! feof($generateNumberArr_v)) {
$str .= fgets($generateNumberArr_v, 4096);
}
$retArr[] = $str;
pclose($generateNumberArr_v);

}
var_dump($retArr);
?>


轉(zhuǎn)載于:https://blog.51cto.com/ginocs/1321093

總結(jié)

以上是生活随笔為你收集整理的PHP并发技术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。