如何使用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()不应该返回任何内容。您应该使用共享资源和同步来使完成状态可用于主线程。


示例:

<?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"