PHP: <?php $urls = array(); $urls[0] = "http://www.wiw.ru"; $urls[1] = "http://www.google.ee"; $urls[2] = "http://www.google.ee"; $urls[3] = "http://www.google.ee"; $urls[4] = "http://www.google.ee"; $urls[5] = "http://www.google.ee"; $urls[6] = "http://www.google.ee"; $mh = curl_multi_init(); foreach ($urls as $i => $url) { $conn[$i] = curl_init(trim($url)); curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1); curl_multi_add_handle ($mh,$conn[$i]); } // start performing the request do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active and $mrc == CURLM_OK) { // wait for network if (curl_multi_select($mh) != -1) { // pull in any new data, or at least handle timeouts do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } if ($mrc != CURLM_OK) { print "Curl multi read error $mrc\n"; } // retrieve data foreach ($urls as $i => $url) { if (($err = curl_error($conn[$i])) == '') { $res[$i]=curl_multi_getcontent($conn[$i]); } else { print "Curl error on handle $i: $err\n"; } curl_multi_remove_handle($mh,$conn[$i]); curl_close($conn[$i]); } curl_multi_close($mh); print_r($res); ?> Погуглил и решил проверить.Вроде работает,но не отображается ничего таск менеджере.Это и есть многопоточность,или же это иллюзии?)
Это мультикурл, запросы выполняются параллельно. По идее это многопоточность,но, насколько я знаю, в многопоточности нет. поправьте, если не так.
Ммм... Я вместо foreach() поставил цикл из for и решил выводить значение $mrc в первом цикле do while.Почему выводит -1? $conn[$i] = curl_init(trim($urls[0])); ЗЫ: Я это делал для того,чтобы один и тот же линк открыть n-ое число раз или послать n-ое число раз запрос.
Проблему решил простой конструкцией: for($i=0;$i<100;$i++) { $urls[] = $urls[0]; } Чет заранее не дошло...
Многопоточность - когда потоки идут ПАРАЛЕЛЬНО. А в твоем случае - цикл. Т.е. поток за потоком, т.е. ПОСЛЕДОВАТЕЛЬНО. Это НЕ многопоточность!
ок, а давай тогда пример языка, поддерживающего многопоточность, только сделай запуск потоков одновременно
Java к примеру. Или питон(с небольшим отступлением на GIL). Или C#. Потоки будут работать одновременно. и обладать выжным свойством: shared state.
юмора не поняли. вопрос был не о параллельном выполнении, а об одновременном запуске, т.е. не последовательном запуске Code: Thread t1 =new Thread(new ThreadStart(obj.dowork)); Thread t2 =new Thread(new ThreadStart(obj.dowork)); t1.start(); t2.start(); потоки выполняются параллельно, но запускаются то последовательно.
Многопоточность в PHP обещают в 7 версии, еще 6 толком не вышла, так что еще долго будут появляться такие темы, многопоточность это далеко не то.
Может случиться, что запустятся они одновременно. Вот схема: Поток 1 запусекает потоки 2 и 3. Поток 2 запускает поток 4, поток 5 запускает поток 5. Если отбросить синхронизацию менеджера потоков - то они запустятся одновременно.