我如何使用 pthread 来改进我的网站

how can i use pthread to improve my websites

我想使用一些线程来进行计算,并且我的 Web 服务运行得更快。 不要深入计算,它可以正常工作。但是,我的问题是在不使用此线程的情况下,它花费了大约 55 秒,尽管现在又是大约 55 秒。

所以我想知道我是否以正确的方式使用它? 这是使用 pthreads 的正确形式吗?

我的 php 版本:5.5.12

class workerThread extends Thread {
    public function __construct($eng,$year,$capacity){
        $this->eng = $eng;
        $this->year = $year;
        $this->capacity = $capacity;
    }

    public function run(){

        $counter=0;
        $paye1=0;
        $paye2=0;
        $paye3=0;

        foreach($this->eng as $engs){
        $data=filter_engs($engs['id'],$this->year,$this->capacity);

        if(isset($data['state'])){






            if($engs['checkLevel']=='one'){
                $paye1++;
                $list[$counter]['avgCap']='2304';
                $list[$counter]['avg']=ceil(($data['cheked']/2304)*100);
                $list[$counter]['fullavg']=ceil(($data['cheked']/$data['allWork'])*100);
            }else if($engs['checkLevel']=='two'){
                $paye2++;
                $list[$counter]['avgCap']='1728';
                $list[$counter]['avg']=ceil(($data['cheked']/1728)*100);
                $list[$counter]['fullavg']=ceil(($data['cheked']/$data['allWork'])*100);
            }else if($engs['checkLevel']=='three'){
                $paye3++;
                $list[$counter]['avgCap']='1152';
                $list[$counter]['avg']=ceil(($data['cheked']/1152)*100);
                $list[$counter]['fullavg']=ceil(($data['cheked']/$data['allWork'])*100);
            }
            $list[$counter]['allWork']=$data['allWork'];
            $list[$counter]['wCap']=$data['wCap'];
            $list[$counter]['cheked']=$data['cheked'];
            $list[$counter]['design']=$data['wCap']-$data['cheked'];
            $list[$counter]['countCheked']=$data['countCheked'];
            $list[$counter]+=$engs;


            $counter++;


        }
    }
        return $list;
    }
}

这就是我的使用方式:

 $worker=new workerThread($eng,$year,$cap);
 $list=$worker->run();
 $worker->kill();

 //and doing some stuff with $list array

您不应直接调用 run(),因为它会 运行 主线程中的代码。

您应该调用 start() 来创建一个新线程,这个新线程将执行 run().

您可以稍后使用 join() 来等待线程完成它们的工作。

此外,run() 不应该 return 任何东西。您应该使用共享资源和同步来使完成状态对主线程可用。


示例:

<?php

class WorkerThread extends \Thread
{
    private $eng;
    private $year;
    private $capacity;
    private $list = array();

    public function __construct($eng, $year, $capacity)
    {
        $this->eng = $eng;
        $this->year = $year;
        $this->capacity = $capacity;
    }

    /**
     * Replace with your code
     */
    public function run()
    {
        sleep(2); // thread running this will sleep for 2 seconds
        $this->list = array('chocolate', 'banana', 'pistachio');
    }

    public function getList()
    {
        return $this->list;
    }
}

$worker = new WorkerThread("Lorem", "Ipsum", "FooBar");
var_dump($worker->getList()); // should be empty
$worker->start();

// ... do some other stuff ...

$worker->join(); // main thread waits for WorkerThread to complete
var_dump($worker->getList()); // should have "chocolate", "banana", "pistachio"