1. 程式人生 > >python 多程序/多執行緒/協程 同步非同步

python 多程序/多執行緒/協程 同步非同步

這篇主要是對概念的理解:

1、非同步和多執行緒區別:二者不是一個同等關係,非同步是最終目的,多執行緒只是我們實現非同步的一種手段。非同步是當一個呼叫請求傳送給被呼叫者,而呼叫者不用等待其結果的返回而可以做其它的事情。實現非同步可以採用多執行緒技術或則交給另外的程序來處理。多執行緒的好處,比較容易的實現了 非同步切換的思想, 因為非同步的程式很難寫的多執行緒本身程還是以同步完成,但是應該說比效率是比不上非同步的。 而且多線很容易寫, 相對效率也高。

2、非同步和同步的區別:  在io等待的時候,同步不會切走,浪費了時間。非同步和同步是相對的,同步就是順序執行,執行完一個再執行下一個,需要等待、協調執行。非同步就是彼此獨立,在等待某事件的過程中繼續做自己的事,不需要等待這一事件完成後再工作。執行緒就是實現非同步的一個方式。 非同步是讓呼叫方法的主執行緒不需要同步等待另一執行緒的完成,從而可以讓主執行緒幹其它的事情。
  3、 多執行緒:多執行緒是程式設計的邏輯層概念,它是程序中併發執行的一段程式碼。 多執行緒可以實現執行緒間的切換執行。多執行緒的優點很明顯,執行緒中的處理程式依然是順序執行,符合普通人的思維習慣,所以程式設計簡單。但是多執行緒的缺點也同樣明顯 ,執行緒的使用(濫用)會給系統帶來上下文切換的額外負擔。並且執行緒間的共享變數可能造成死鎖的出現。   4、python因為GIL 全域性鎖的原因, 所以同一時刻只能有一個執行緒在執行,遇到IO操作才會釋放切換。當我們需要編寫併發爬蟲等IO密集型的程式時,應該選用多執行緒或者協程;當我們需要科學計算,設計CPU密集型程式,應該選用多程序,更好的利用多個CPU。