go 語言基礎 進程Process 線程Thread 協程Goroutine

進程,Process

何爲進程,簡單來講進程就是我們計算機裏啓動的程序,每啓動一個程序,就啓動了一條進程


如圖片所示,這個叫活動監視器,後面還有個括號,寫着所有進程,所以這些程序就是所謂的進程,如果進程結束,那麼所有線程,協程也都會結束

那我們知道了進程 ,那線程又是什麼呢

線程 Thread

還是這張圖,細心的朋友應該已經看到了,每個程序後面都會有一列是線程,對沒錯,線程就是每個程序裏單出來的一條線,一個線程只能幹一件事情,而一個程序裏有多個線程,就是可以幹多件事情,一個線程佔用相對進程要小很多,但是跟我們接下來要介紹的協程,那線程就可以算是重量級了。

協程 Coroutine 

那協程又是怎麼理解呢,其實也很好理解,協程就可以理解爲輕量級的線程。

go語言中的協程 Goroutine

go語言引以爲傲的就是go的協程,我們叫他Goroutine,這也是go語言相對於別的語言的優勢所在,以很小的資源代價,來運行多個協程,go語言是一門併發性語言,啥又爲併發性呢

Concurrency併發性

同時可以執行多條路徑,但是同一時間點上,只能執行1個。講到併發性那我們就不能不說並行性

arallelism並行性

多條路徑同時執行,真正的並行多核支持。

go語言作爲一門併發性語言,可以很小的代價啓動多條Goroutine,從而來完成需要完成的工作,他不是一個一個順序完成,而是多個Goroutine一起爭搶資源,誰搶到,誰運行,最大化利用有限資源,從而提高工作效率,在go語言中,啓動Goroutine也很簡單,只要在要執行的函數或方法前面加上go關鍵字,一條Goroutien就開啓了,main函數也是一條Goroutine,main函數是主的Goroutine,只要他一結束,那麼整個程序就會結束,所以一般我們會讓main函數先等待,等其他子Goroutien結束之後,主函數在結束,而讓main函數等待的方法有很多,比如,通道 channel,或者同步等待組 sync包的WaitGroup方法,又或者簡單暴力的time包下的sleep方法,接下來我會一一介紹。

       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章