對于網(wǎng)絡(luò)爬蟲,相比大家已經(jīng)并不陌生了,大家時(shí)常寫的都是串行爬蟲,已經(jīng)爛大街了,平庸而緩慢的爬蟲可能不足以滿足聰明的你,所以,今天想給大家簡單介紹一下更“高大上”的爬蟲——多線程網(wǎng)絡(luò)爬蟲。
何為進(jìn)程、線程、多線程?
進(jìn)程:進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)行活動(dòng)。它是操作系統(tǒng)動(dòng)態(tài)執(zhí)行的基本單元,在傳統(tǒng)的操作系統(tǒng)中,進(jìn)程既是基本的分配單元,也是基本的執(zhí)行單元。
線程:不擁有系統(tǒng)資源,故對它的調(diào)度所付出的開銷就會(huì)小得多,能更高效的提高系統(tǒng)多個(gè)程序間并發(fā)執(zhí)行的程度。
多線程:在一個(gè)程序中,這些獨(dú)立運(yùn)行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理”。多線程是為了同步完成多項(xiàng)任務(wù),不是為了提高運(yùn)行效率,而是為了提高資源使用效率來提高系統(tǒng)的效率。線程是在同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候?qū)崿F(xiàn)的。
舉個(gè)例子就是:我打開了QQ,此時(shí),啟動(dòng)了一個(gè)進(jìn)程(即QQ),給A發(fā)了一條語音,啟動(dòng)了該進(jìn)程中的一個(gè)線程;然后又給B發(fā)了一個(gè)表情,此時(shí)我又啟動(dòng)了一個(gè)線程。這就是進(jìn)程、線程、多線程的一個(gè)最簡單的例子。
php中的多線程
PHP 默認(rèn)并不支持多線程,要使用多線程需要安裝 pthread 擴(kuò)展,而要安裝 pthread 擴(kuò)展,必須使用 --enable-maintainer-zts 參數(shù)重新編譯 PHP,這個(gè)參數(shù)是指定編譯 PHP 時(shí)使用線程安全方式。而在swoole中,php可以借助其啟動(dòng)子進(jìn)程的方式,實(shí)現(xiàn)php的多進(jìn)程:
<?php echo '開始時(shí)間:'.date('H:i:s',time()); //進(jìn)程數(shù) $work_number=6; // $worker=[]; //模擬地址 $curl=[ 'https://blog.csdn.net/feiwutudou', 'https://wiki.swoole.com/wiki/page/215.html', 'http://fanyi.baidu.com/?aldtype=16047#en/zh/manager', 'http://wanguo.net/Salecar/index.html', 'http://o.ngking.com/themes/mskin/login/login.jsp', 'https://blog.csdn.net/marksinoberg/article/details/77816991' ]; //單線程模式 // foreach ($curl as $v) { // echo curldeta($v); // } //創(chuàng)建進(jìn)程 for ($i=0; $i < $work_number; $i++) { //創(chuàng)建多線程 $pro=new swoole_process(function(swoole_process $work) use($i,$curl){ //獲取html文件 $content=curldeta($curl[$i]); //寫入管道 $work->write($content.PHP_EOL); },true); $pro_id=$pro->start(); $worker[$pro_id]=$pro; } //讀取管道內(nèi)容 foreach ($worker as $v) { echo $v->read().PHP_EOL; } //模擬爬蟲 function curldeta($curl_arr) { //file_get_contents echo $curl_arr.PHP_EOL; file_get_contents($curl_arr); } //進(jìn)程回收 swoole_process::wait(); echo '結(jié)束時(shí)間:'.date('H:i:s',time()); ?>多進(jìn)程執(zhí)行結(jié)果
以上就是“提升格調(diào)神器,swoole多線程網(wǎng)絡(luò)爬蟲了解一下!”的詳細(xì)內(nèi)容,想要了解更多swoole教程歡迎關(guān)注編程學(xué)習(xí)網(wǎng)
掃碼二維碼 獲取免費(fèi)視頻學(xué)習(xí)資料
- 本文固定鏈接: http://www.wangchenghua.com/post/8429/
- 轉(zhuǎn)載請注明:轉(zhuǎn)載必須在正文中標(biāo)注并保留原文鏈接
- 掃碼: 掃上方二維碼獲取免費(fèi)視頻資料