Go并發之同步異步、異步回調
衆所周知,Go語言最強大的地方在于它支援的高并發特性。下面我們先來了解一下Go并發的一些理論基礎:同步異步、異步回調。也順帶在此介紹一下程序、線程、協程的差別。
程序、線程、協程的差別
- 一邊寫代碼、一邊聽音樂、一邊聊天這就是程序并發。
- 一個程序可以開幾條線程。比如迅雷下載下傳時把一個檔案分成多塊,然後多線程下載下傳。
- 協程其實也就被稱為微線程,它的資源開銷遠遠小于線程。
同步異步、異步回調
- 多個事件并發執行是為異步
- 多個事件按順序執行是為同步
- 某個事件一直無法取到資源來繼續執行是為阻塞,如果是串行的,前一個事件未執行,那下一個事件就需要永遠等下去
-
什麼是異步回調機制?
通俗來說,假如你和你老闆同時工作,你敲代碼、寫文檔,老闆喝茶、去會所。
你們兩是同時幹你們的工作,這是異步,然後你幹完了事,得向老闆彙報你的工作,你與老闆這樣就有了交流。沒幹完事不能打電話給老闆。老闆會根據你的工作效果來給你加減獎金。
這樣老闆不必等你辛辛苦苦工作完了再去喝茶、去會所了。
這就是異步回調!
- 異步的優缺點:
- 優點:
- 速度快,效率高
- 沒有時序上的嚴格先後關系
- 異步可以不需要立刻給調用方最終的結果,在給調用方最終結果之前可以進行更多操作。
- 增強系統健壯性。
- 缺點:
- 使用回調函數時容易形成回調地獄
- 開發難度較大
- 并發量不容易控制,容易消耗過多資源。
- 優點: