Пожалуйста, помогите, если это возможно. Я намеревался вытащить X количество строк из БД, разделив их на массивы из 20 массивов и передать их в поток для обработки одновременно.
Чтобы гарантировать, что процесс работает одновременно, я создал быстрый поток, в котором эхо выводится число потоков, тогда число равно 20. Я ожидал увидеть результаты как «1 в 1», затем «2 в 1». Вместо этого я вижу, что первый поток подсчитывается до 20, прежде чем второй поток начнет выполняться. т.е. «1 at 1» … «1 at 20», тогда только «2 at 1».
<?php class helloworld extends Thread { public function __construct($arg){ $this->arg = $arg; } public function run(){ if($this->arg){ for ($i=1;$i<=20;$i++){ echo $this->arg ." AT "; echo $i." "; sleep(1); } } } }
?>
Тогда, чтобы назвать это, я использую
for ($i=1;$i<=$num_threads;$i++){ $thread[$i] = new helloworld($i); if($thread[$i]->start()) $thread[$i]->join(); }
Является ли это правильным? Или я делаю что-то глупое здесь?
благодаря
обкрадывать
Функция join () pthread ожидает завершения указанного потока. Если этот поток уже завершен, функция pthread join () немедленно возвращается. Указанный поток должен быть совместимым.
Таким образом, вы ожидаете завершения каждого начатого потока, прежде чем двигаться в своем цикле.