Вопрос вроде-как обширный - решил создать тему. Есть Цикл1 PHP: do { $mrc = curl_multi_exec($mh, $active); } while ($active>0); Особых сложностей для понимания не вызывает, выполняется пока все потоки не выполнятся или таймаут не закончится. Цикл2 PHP: $running=null; //просто запускаем все соединения while( ($mrc = curl_multi_exec($mh, $running))==CURLM_CALL_MULTI_PERFORM ); while($running && $mrc == CURLM_OK){ if($running and curl_multi_select($mh)!=-1 ){ do{ $mrc = curl_multi_exec($mh, $running); // если поток завершился if( $info=curl_multi_info_read($mh) and $info['msg'] == CURLMSG_DONE ){ $ch = $info['handle']; // смотрим http код который он вернул $status=curl_getinfo($ch,CURLINFO_HTTP_CODE); // и собственно что он вернул $data=curl_multi_getcontent($info['handle']); curl_multi_remove_handle($mh, $ch); // удаляем наше соединение из стека curl_close($ch); // закрываем его } }while ($mrc == CURLM_CALL_MULTI_PERFORM); } usleep(100); } Действительно ли использовать второй предпочтительней когда начинает тормозить один из потоков (если прокси тормозит)? По моим тестам первый работает быстрее, но я не использовал прокси вообще. Нигде не могу найти значения констант: CURLM_CALL_MULTI_PERFORM, CURLM_OK, CURLMSG_DONE. PS: моя цель отсеивать нерабочие потоки при невалидном прокси.
Действительно. Обработка данных начнется как только будет готовы первые данные. Естественно, это сработает, только если вы начнете обработку внутри этого кода, а не будете складировать данные в массив, а обрабатывать уже после описанного кода. Константы на то и константы, чтобы их значение вас не интересовало, а были использованы их имена. Но если очень хочется, то "echo CURLM_OK;"