как я могу использовать pthread для улучшения своих сайтов

Я хочу использовать некоторые потоки, чтобы мои вычисления и мой веб-сервис работали быстрее.
не углубляйтесь в вычисления, это работает правильно. Тем не менее, моя проблема в том, что без использования этого потока это заняло что-то около 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

0

Решение

Вы не должны звонить 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"
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]