天天看點

Go語言 之協程并發

協程:coroutine。也叫輕量級線程。

與傳統的系統級線程和程序相比,協程最大的優勢在于“輕量級”。可以輕松建立上萬個而不會導緻系統資源衰竭。而線程和程序通常很難超過1萬個。這也是協程别稱“輕量級線程”的原因。

一個線程中可以有任意多個協程,但某一時刻隻能有一個協程在運作,多個協程分享該線程配置設定到的計算機資源。

多數語言在文法層面并不直接支援協程,而是通過庫的方式支援,但用庫的方式支援的功能也并不完整,比如僅僅提供協程的建立、銷毀與切換等能力。如果在這樣的輕量級線程中調用一個同步 IO 操作,比如網絡通信、本地檔案讀寫,都會阻塞其他的并發執行輕量級線程,進而無法真正達到輕量級線程本身期望達到的目标。

在協程中,調用一個任務就像調用一個函數一樣,消耗的系統資源最少!但能達到程序、線程并發相同的效果。

在一次并發任務中,程序、線程、協程均可以實作。從系統資源消耗的角度出發來看,程序相當多,線程次之,協程最少。

繼續閱讀