Autor | Zpráva | ||
---|---|---|---|
Multithread Profil * |
#1 · Zasláno: 2. 9. 2009, 19:06:16
Ahoj, dělám na skriptu který stahuju soubory z webu. Z důvodu pomalého připojení chci udělat stahování vícevláknové. Koukal jsem na pár kodu(viz http://www.newsroom.cz/php-javascript/55-php-skripty/64-php-multithreading-s-knihovnou-curl, http://php.vrana.cz/paralelni-zpracovani.php) a měřil si jak dlouho probíhají. "Nevláknový" skript probíhal mnohem kratší dobu. Jak je to možné?
Porovnávám čas těchto kodů: Vícevkláknový <?php $vyhledavace = array( // nazev => array(url, pattern), ... 'Seznam.cz' => array('http://search.seznam.cz/', '<b>([ 0-9]+)</b> nalezen'), 'Centrum.cz' => array('http://search.centrum.cz/', 'Nalezeno <strong>([ 0-9]+)</strong>'), 'Atlas.cz' => array('http://search.atlas.cz/', '<b>([ 0-9]+)</b></span> nalezen'), 'Jyxo.cz' => array('http://jyxo.cz/', 'Jyxo nalezlo <b>([0-9]+)</b>'), 'Google.com' => array('http://www.google.com/', 'of about <b>([,0-9]+)</b>'), 'polymed.cz' => array('http://www.polymed.cz', 'of about <b>([,0-9]+)</b>'), ); // 'Seznam.cz' => array('http://search.seznam.cz/search.cgi?w=', '<b>([ 0-9]+)</b> nalezen'), // 'Centrum.cz' => array('http://search.centrum.cz/index.php?q=', 'Nalezeno <strong>([ 0-9]+)</strong>'), // 'Atlas.cz' => array('http://search.atlas.cz/default.aspx?q=', '<b>([ 0-9]+)</b></span> nalezen'), // 'Jyxo.cz' => array('http://jyxo.cz/s?s=', 'Jyxo nalezlo <b>([0-9]+)</b>'), // 'Google.com' => array('http://www.google.com/search?q=', 'of about <b>([,0-9]+)</b>'), // 'polymed.cz' => array('http://www.polymed.cz', 'of about <b>([,0-9]+)</b>'), //); $curl_multi = curl_multi_init(); foreach ($vyhledavace as &$val) { $val[2] = curl_init($val[0] . urlencode($_GET["slovo"])); curl_setopt($val[2], CURLOPT_RETURNTRANSFER, true); curl_multi_add_handle($curl_multi, $val[2]); } unset($val); do { curl_multi_select($curl_multi); while (CURLM_CALL_MULTI_PERFORM == curl_multi_exec($curl_multi, $running)) { // provést znovu } if ($running && strtoupper(substr(PHP_OS, 0, 3)) == "WIN") { sleep(1); // pod Windows curl_multi_select() nečeká } } while ($running); foreach ($vyhledavace as $nazev => $val) { $file = curl_multi_getcontent($val[2]); echo $file; // echo "$nazev: " . (preg_match("~$val[1]~", $file, $matches) ? $matches[1] : "nenalezeno") . "\n"; } ?> <?php $vyhledavace = array( // nazev => array(url, pattern), ... 'Seznam.cz' => array('http://search.seznam.cz/', '<b>([ 0-9]+)</b> nalezen'), 'Centrum.cz' => array('http://search.centrum.cz/', 'Nalezeno <strong>([ 0-9]+)</strong>'), 'Atlas.cz' => array('http://search.atlas.cz/', '<b>([ 0-9]+)</b></span> nalezen'), 'Jyxo.cz' => array('http://jyxo.cz/', 'Jyxo nalezlo <b>([0-9]+)</b>'), 'Google.com' => array('http://www.google.com/', 'of about <b>([,0-9]+)</b>'), 'polymed.cz' => array('http://www.polymed.cz', 'of about <b>([,0-9]+)</b>'), ); foreach ($vyhledavace as $val) { // print_r($val); $file = file_get_contents($val[0]); //echo $file; // echo "$nazev: " . (preg_match("~$val[1]~", $file, $matches) ? $matches[1] : "nenalezeno") . "\n"; } |
||
Časová prodleva: 15 let
|
0