HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Это многопоточность ? ))
  #1  
Старый 27.03.2009, 14:55
Велемир
Banned
Регистрация: 19.06.2006
Сообщений: 1,239
С нами: 10470131

Репутация: 142


По умолчанию Это многопоточность ? ))

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);

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

  #2  
Старый 27.03.2009, 14:58
wildshaman
Постоянный
Регистрация: 16.04.2008
Сообщений: 889
С нами: 9510146

Репутация: 1550


По умолчанию

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

  #3  
Старый 27.03.2009, 15:00
Велемир
Banned
Регистрация: 19.06.2006
Сообщений: 1,239
С нами: 10470131

Репутация: 142


По умолчанию

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

  #4  
Старый 27.03.2009, 15:04
wildshaman
Постоянный
Регистрация: 16.04.2008
Сообщений: 889
С нами: 9510146

Репутация: 1550


По умолчанию

Цитата:
Сообщение от Велемир  
Как понять нет ?) Выигрыш-то есть какой-то ? =_=,ибо другое я не осилил.
Выигрыш есть, бузксловно. Так скрипт проходится сразу по 10 линкам, а не по очереди
 
Ответить с цитированием

  #5  
Старый 27.03.2009, 15:10
Велемир
Banned
Регистрация: 19.06.2006
Сообщений: 1,239
С нами: 10470131

Репутация: 142


По умолчанию

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

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

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

Последний раз редактировалось Велемир; 27.03.2009 в 15:18..
 
Ответить с цитированием

  #6  
Старый 27.03.2009, 15:34
Велемир
Banned
Регистрация: 19.06.2006
Сообщений: 1,239
С нами: 10470131

Репутация: 142


По умолчанию

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

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

$urls[] = $urls[0];

}

Чет заранее не дошло...
 
Ответить с цитированием

  #7  
Старый 27.03.2009, 16:16
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
С нами: 9410786

Репутация: 2731


По умолчанию

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

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

$urls[] = $urls[0];

}

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

  #8  
Старый 27.03.2009, 16:29
geezer.code
Reservists Of Antichat - Level 6
Регистрация: 22.01.2007
Сообщений: 616
С нами: 10158086

Репутация: 1359


По умолчанию

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

  #9  
Старый 27.03.2009, 15:59
rushter
Reservists Of Antichat - Level 6
Регистрация: 23.05.2008
Сообщений: 756
С нами: 9456866

Репутация: 979


По умолчанию

Это жалкое подобие
 
Ответить с цитированием

  #10  
Старый 27.03.2009, 16:34
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
С нами: 9410786

Репутация: 2731


По умолчанию

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





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.