1. 程式人生 > >數據挖掘_並行並發介紹和同步異步介紹

數據挖掘_並行並發介紹和同步異步介紹

切換 效率 影響 height 我們 挖掘 com 通過 得到

技術分享圖片

前面跟大家講的request s和spynner都是單進程(單線程)的順序抓取,而並發和並行執行的異步抓取會極大地提高抓取效率。

並行和並發

並發和並行使兩個相似的概念,並發是指在一個時間段內發生若幹事件的情況,並行是指在同一時刻發生若幹事件的情況。

我們可以以CPU的工作方式來說明這兩個概念

單核CPU下,多任務操作系統的各任務是以並發的方式運行的,因為只有一個處理器,所以各任務會以分時的方式在一段事件內分別占用CPU依次執行,如果在自己分得的時間段內沒有完成,那麽就需要等到下一次得到CPU的使用權時才會繼續執行,直到整個任務完成,因為CPU的切換速度很快,所以給我們的感覺就是同時在運行多個任務

多核CPU下,因為有兩個以上(包含兩個)可以同時工作的內核,所以就有可能在各個核上運行的任務能同時進行,這就叫做並行

通過這張圖你應該能更好的理解(串行不在我們考慮的範圍內)

技術分享圖片

同步和異步

同步和異步的概念,一般會涉及到多個任務或事件的參與。可以在並發或並行的背景下去理解這兩個概念

同步指的是並發或並行發生的各任務之間不是孤立獨自運行的,一個任務的進行可能需要在獲得另一個任務的給出的結果之後

或者說是只有一個任務完成或給出一個結果之後,另一個任務在獲得這個結果後才能繼續運行

總之,各任務的運行會彼此相互制約,節奏和步調要協調好,否則就會出現錯誤

異步指的是並發或並行發生的各任務之間彼此是獨立運行的,不受各自的影響,這是異步與同步最主要的區別

技術分享圖片

實際工作中如何進行選擇

當需要多個任務互相配合在並發或並行環境中合作完成時,就需要以同步的方式運行

操作系統是以信號量機制來實現同步的,各類編程語言也在進行並行或並發程序設計時提供了同步機制

例如Python在多線程設計時的鎖機制

技術分享圖片

當我們需要將一個大的任務分解成若幹個小的子任務時,各子任務可以分別獨自完成,彼此之間不需要互相協作,這是就可以考慮使它們異步地並行或異步地並發執行

這在數據抓取時始終很常見的模式,將若幹要抓取的鏈接分為幾組,然後對每組分別使用子任務進行抓取,待各子任務抓取結束後,再將結果進行匯總,完成整個任務

關於這些概念大概就是這些,如果不是太明白,可以自己查閱資料弄明白

數據挖掘_並行並發介紹和同步異步介紹