天天看點

Go并發之同步異步、異步回調

Go并發之同步異步、異步回調

衆所周知,Go語言最強大的地方在于它支援的高并發特性。下面我們先來了解一下Go并發的一些理論基礎:同步異步、異步回調。也順帶在此介紹一下程序、線程、協程的差別。

程序、線程、協程的差別

  • 一邊寫代碼、一邊聽音樂、一邊聊天這就是程序并發。
  • 一個程序可以開幾條線程。比如迅雷下載下傳時把一個檔案分成多塊,然後多線程下載下傳。
  • 協程其實也就被稱為微線程,它的資源開銷遠遠小于線程。

同步異步、異步回調

  • 多個事件并發執行是為異步
  • 多個事件按順序執行是為同步
  • 某個事件一直無法取到資源來繼續執行是為阻塞,如果是串行的,前一個事件未執行,那下一個事件就需要永遠等下去
  • 什麼是異步回調機制?

    通俗來說,假如你和你老闆同時工作,你敲代碼、寫文檔,老闆喝茶、去會所。

    你們兩是同時幹你們的工作,這是異步,然後你幹完了事,得向老闆彙報你的工作,你與老闆這樣就有了交流。沒幹完事不能打電話給老闆。老闆會根據你的工作效果來給你加減獎金。

    這樣老闆不必等你辛辛苦苦工作完了再去喝茶、去會所了。

    這就是異步回調!

  • 異步的優缺點:
    • 優點:
      1. 速度快,效率高
      2. 沒有時序上的嚴格先後關系
      3. 異步可以不需要立刻給調用方最終的結果,在給調用方最終結果之前可以進行更多操作。
      4. 增強系統健壯性。
    • 缺點:
      1. 使用回調函數時容易形成回調地獄
      2. 開發難度較大
      3. 并發量不容易控制,容易消耗過多資源。