天天看點

開發要搞清楚什麼是并發,并行,串行,同步,異步?

     實際開發中很多人會因為并發,并行,串行,同步,異步等名詞搞混,搞不清楚這些名稱的意思和之間對應的關系。其實這也是實際開發中必須掌握一些知識點。掌握和了解這些概念也有助于我們去更好去開好。

   1.并發程式設計又叫多線程程式設計。

       在程式中,往往有很多很耗時的工作,比如上傳檔案、下載下傳檔案、跟客戶聊天需要長時間建立連接配接。這種時候,一個線程是服務不了多個使用者的,會産生因為資源獨占産生的等待問題。并發的實質是一個實體CPU(也可以多個實體CPU) 在若幹道程式之間多路複用,并發性是對有限實體資源強制行使多使用者共享以提高效率。(并發指的是任務數多餘cpu核數,通過作業系統的各種任務排程算法,實作用多個任務“一起”執行(實際上總有一些任務不在執行,因為切換任務的速度相當快,看上去一起執行而已))

    并發當有多個線程在操作時,如果系統隻有一個CPU,則它根本不可能真正同時進行一個以上的線程,它隻能把CPU運作時間劃分成若幹個時間段,再将時間 段配置設定給各個線程執行,在一個時間段的線程代碼運作時,其它線程處于挂起狀。.這種方式我們稱之為并發(Concurrent)。

  2.“并行”指兩個或兩個以上事件或活動在同一時刻發生。在多道程式環境下,并行性使多個程式同一時刻可在不同CPU上同時執行。(hadoop叢集就是并行計算的)

     當系統有一個以上CPU時,則線程的操作有可能非并發。當一個CPU執行一個線程時,另一個CPU可以執行另一個線程,兩個線程互不搶占CPU資源,可以同時進行,這種方式我們稱之為并行(Parallel)。

并發和并行 

    并發和并行是即相似又有差別的兩個概念,并行是指兩個或者多個事件在同一時刻發生;而并發是指兩個或多個事件在同一時間間隔内發生。在多道程式環境下,并發性是指在一段時間内宏觀上有多個程式在同時運作,但在單處理機系統中,每一時刻卻僅能有一道程式執行,故微觀上這些程式隻能是分時地交替執行。倘若在計算機系統中有多個處理機,則這些可以并發執行的程式便可被配置設定到多個處理機上,實作并行執行,即利用每個處理機來處理一個可并發執行的程式,這樣,多個程式便可以同時執行。

  3.串行、并行:

       并行和串行指的是任務的執行方式。串行是指多個任務時,各個任務按順序執行,完成一個之後才能進行下一個。并行指的是多個任務可以同時執行,異步是多個任務并行的前提條件。

  4.同步、異步:

         指的是能否開啟新的線程。同步不能開啟新的線程,異步可以。

         異步:異步和同步是相對的,同步就是順序執行,執行完一個再執行下一個,需要等待、協調運作。異步就是彼此獨立,在等待某事件的過程中繼續做自己的事,不需要等待這一事件完成後再工作。線程就是實作異步的一個方式。異步是讓調用方法的主線程不需要同步等待另一線程的完成,進而可以讓主線程幹其它的事情。

         異步和多線程并不是一個同等關系,異步是最終目的,多線程隻是我們實作異步的一種手段。異步是當一個調用請求發送給被調用者,而調用者不用等待其結果的傳回而可以做其它的事情。實作異步可以采用多線程技術或則交給另外的程序來處理。

   5.多線程:多線程是程式設計的邏輯層概念,它是程序中并發運作的一段代碼。多線程可以實作線程間的切換執行。

繼續閱讀