PHP实现多线程并发操作数据库

时间:16-12-28 栏目:PHP开发 作者:kyle 评论:0 点击: 5,963 次

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];
    }
}

 

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

成都SEO小五嚎2句: 本文是(成都SEO小五)辛苦弄出来的,转载成都SEO小五原创的请保留链接: PHP实现多线程并发操作数据库,3Q

PHP实现多线程并发操作数据库:等您坐沙发呢!

来给哥评论评论


------====== 小五公告 ======------
成都SEO小五,专注成都搜索引擎优化。
小五善长站内外优化,C#、PHP开发,中英文SEO,Google中英文和百度优化技术。欢迎群内交流。伸手党请绕路,求资源的请绕开,求问题解答的请进群内交流。开放了一个QQ交流群:160750032。加入验证时请标注任何SEO相交字眼。友情链接直接Q我,收录正常,内容大部份原创、SEO或者程序开发、网络营销、线上推广等相关行业即可。

常用工具

赞助广告

来看过哥的人