php多线程操作数据库(转)

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

 

示例代码为:

/**
 * 并发多线程运行任务,把任务拆解成区块,用多线程去并发执行
 * @param callable $exeWorkers [任务函数体]
 * @param [type]   $maxJob     [最大数量]
 * @param [type] $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);

 

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

 

并发链接数据库时,可以通过设置线程ID实现并发链接。

具体代码类似:

class DB {

    public static function getInstance()
    {
        static $instances = array();
        $key = getmypid();
        if (empty($instances[$key])) { $instances[$key] = new DB(); } return $instances[$key]; } }

 

只放代码,具体可以自己尝试一下,并发操作数据库可以极大的提高处理数据的性能,在定时任务和数据处理的时候非常有用。

转载于:https://www.cnblogs.com/tine/p/9316558.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值