Goroutine 是GO語言特有的名詞芝硬,區(qū)別于進程Process辞友,線程Thread。
Gorourine 是與其他函數(shù)或方法同時運行的函數(shù)或方法会通。Goroutines可以被認為是輕量級的線程。與線程相比娄周,創(chuàng)造協(xié)程的成本很小涕侈,他就是一個代碼,一個函數(shù)入口煤辨。因此他非常廉價裳涛,Go應用程序可以并發(fā)運行數(shù)千個Goroutines。
主Goroutine是指封裝main函數(shù)的goroutine众辨,他所做的事情并不是執(zhí)行一個main函數(shù)這么簡單端三。他首先做的是:設定每一個goroutine所能申請的棧空間的最大尺寸鹃彻。如果有一個goroutine的棧內(nèi)存尺寸大于這個限制郊闯,那么運行時系統(tǒng)就會依法一個棧溢出的運行時恐慌。隨后蛛株,這個go程序的運行也會終止团赁。
此后,主協(xié)程會進行一系列的初始化工作谨履,涉及的工作內(nèi)容大致如下:
1. 創(chuàng)建一個特殊的defer語句欢摄,用于在主協(xié)程退出時做出必要的善后處理。因為主協(xié)程也可能非正常的結(jié)束笋粟。
2. 啟動專用于在后臺清掃內(nèi)存垃圾的goroutine,并設置可用的標識
3. 執(zhí)行main包中的init函數(shù)
4.執(zhí)行main函數(shù)
如何使用協(xié)程:
在函數(shù)或方法調(diào)用前加上關(guān)鍵字go,就會同時運行一個新的Goroutine怀挠。