Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Это многопоточность ? )) (https://forum.antichat.xyz/showthread.php?t=113252)

Велемир 27.03.2009 14:55

Это многопоточность ? ))
 
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_RETURNTRANSFER1);
      
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);

?>

Погуглил и решил проверить.Вроде работает,но не отображается ничего таск менеджере.Это и есть многопоточность,или же это иллюзии?)

wildshaman 27.03.2009 14:58

Это мультикурл, запросы выполняются параллельно. По идее это многопоточность,но, насколько я знаю, в многопоточности нет. поправьте, если не так.

Велемир 27.03.2009 15:00

Как понять нет ?) Выигрыш-то есть какой-то ? =_=,ибо другое я не осилил.

wildshaman 27.03.2009 15:04

Цитата:

Сообщение от Велемир
Как понять нет ?) Выигрыш-то есть какой-то ? =_=,ибо другое я не осилил.

Выигрыш есть, бузксловно. Так скрипт проходится сразу по 10 линкам, а не по очереди

Велемир 27.03.2009 15:10

Ммм... Я вместо foreach() поставил цикл из for и решил выводить значение $mrc в первом цикле do while.Почему выводит -1?

$conn[$i] = curl_init(trim($urls[0]));

ЗЫ: Я это делал для того,чтобы один и тот же линк открыть n-ое число раз или послать n-ое число раз запрос.

Велемир 27.03.2009 15:34

Проблему решил простой конструкцией:

for($i=0;$i<100;$i++) {

$urls[] = $urls[0];

}

Чет заранее не дошло...

rushter 27.03.2009 15:59

Это жалкое подобие :)

mailbrush 27.03.2009 16:16

Цитата:

Сообщение от Велемир
Проблему решил простой конструкцией:

for($i=0;$i<100;$i++) {

$urls[] = $urls[0];

}

Чет заранее не дошло...

Многопоточность - когда потоки идут ПАРАЛЕЛЬНО. А в твоем случае - цикл. Т.е. поток за потоком, т.е. ПОСЛЕДОВАТЕЛЬНО. Это НЕ многопоточность!

geezer.code 27.03.2009 16:29

Цитата:

Сообщение от mailbrush
Многопоточность - когда потоки идут ПАРАЛЕЛЬНО. А в твоем случае - цикл. Т.е. поток за потоком, т.е. ПОСЛЕДОВАТЕЛЬНО. Это НЕ многопоточность!

ок, а давай тогда пример языка, поддерживающего многопоточность, только сделай запуск потоков одновременно ;)

mailbrush 27.03.2009 16:34

.bat
Запускаешь, н.п. несколько брутов дедов =)
+статья была на ачате о многопоточности в пхп.


Время: 20:43