這篇主要是對概念的理解:python
一、異步和多線程區別:兩者不是一個同等關係,異步是最終目的,多線程只是咱們實現異步的一種手段。異步是當一個調用請求發送給被調用者,而調用者不用等待其結果的返回而能夠作其它的事情。實現異步能夠採用多線程技術或則交給另外的進程來處理。多線程的好處,比較容易的實現了 異步切換的思想, 由於異步的程序很難寫的。多線程自己程仍是以同步完成,可是應該說比效率是比不上異步的。 並且多線很容易寫, 相對效率也高。編程
二、異步和同步的區別:
在io等待的時候,同步不會切走,浪費了時間。異步和同步是相對的,同步就是順序執行,執行完一個再執行下一個,須要等待、協調運行。異步就是彼此獨立,在等待某事件的過程當中繼續作本身的事,不須要等待這一事件完成後再工做。線程就是實現異步的一個方式。
異步是讓調用方法的主線程不須要同步等待另外一線程的完成,從而可讓主線程幹其它的事情。
三、 多線程:多線程是程序設計的邏輯層概念,它是進程中併發運行的一段代碼。
多線程能夠實現線程間的切換執行。多線程的優勢很明顯,線程中的處理程序依然是順序執行,符合普通人的思惟習慣,因此編程簡單。可是多線程的缺點也一樣明顯
,線程的使用(濫用)會給系統帶來上下文切換的額外負擔。而且線程間的共享變量可能形成死鎖的出現。
四、python由於GIL 全局鎖的緣由,
因此同一時刻只能有一個線程在運行,遇到IO操做纔會釋放切換。當咱們須要編寫併發爬蟲等IO密集型的程序時,應該選用多線程或者協程;當咱們須要科學計算,設計CPU密集型程序,應該選用多進程,更好的利用多個CPU。