发表于 2019-8-9 11:22

申请会员ID:DSLSalamander

1、申 请 I D:DSLSalamander
2、个人邮箱:469587851@qq.com
3、原创技术文章:本人主要从事PHP,Python开发,后端服务器维护,、

有个php小技巧可以分享下



PHP用pcntl可以实现多线程操作数据库。直接上代码,逻辑自己研究喽。

示例代码为:

/**
* 并发多线程运行任务,把任务拆解成区块,用多线程去并发执行
* @param callable $exeWorkers [任务函数体]
* @param    $maxJob   [最大数量]
* @param    $threadNum    [线程数量]
*/
function runJobWithThread(callable $exeWorkers,$maxJob,$threadNum)
{
    $pids = array();

    for($i = 0; $i < $threadNum; $i++){

      $pids[$i] = pcntl_fork();

      switch ($pids[$i]) {
            case -1:
                echo "fork error : {$i} \r\n";
                exit;

            case 0:
                $totalPage=ceil($maxJob / $threadNum);
                $param = array(
                  //'lastid' => $maxJob / $threadNum * $i,
                  //'maxid' => $maxJob / $threadNum * ($i+1),

                  'page_start' => $totalPage*$i,
                  'page_end' => $totalPage*($i+1),
                );

                $exeWorkers($param);
                exit;

            default:
                break;
      }

    }

    foreach ($pids as $i => $pid) {
      if($pid) {
            pcntl_waitpid($pid, $status);
      }
    }
}


使用时:

//1000个任务,10个线程
runJobWithThread(function($para){
    echo '进程ID:'.getmypid().',最小ID是【'.$para['page_start'].'】最大ID为:【'.$para['page_end'].'】'.PHP_EOL;
},1011,10);


可以实现多线程操作数据。


原文在
https://blog.csdn.net/q469587851/article/details/95306348 也是我的blog

Hmily 发表于 2019-8-9 11:29

抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
页: [1]
查看完整版本: 申请会员ID:DSLSalamander