golang协程介绍和理解
1、介紹協程前先需要了解進程和線程
進程:程序在操作系統中的一次執行過程,系統進行資源分配和調度的一個獨立單位。
線程:進程的一個執行實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。
進程和線程的關系:一個進程可以創建和撤銷多個線程;同一個進程中的多個線程之間可以并發執行。
2、介紹協程
協程:獨立的棧空間,共享堆空間,調度由用戶自己控制,本質上有點類似于用戶級線程,這些用戶級線程的調度也是自己實現的。
線程和協程的關系:一個線程上可以跑多個協程,協程是輕量級的線程。
3、介紹goroutine
本質上,goroutine就是協程。不同的是,Golang在runtime、系統調用等多方面對goroutine調度進行了封裝和處理。
Go語言編程中你不需要去自己寫進程、線程、協程,你的技能包里只有一個技能goroutine。當你需要讓某個任務并發執行的時候,你只需要把這個任務包裝成一個函數,開啟一個goroutine去執行這個函數。
4、使用goroutine
Go語言中使用goroutine非常簡單,只需要在調用函數的時候在前面加上go關鍵字,就可以為一個函數創建一個goroutine。例如:
func hello() {fmt.Println("Hello Goroutine!") } func main() {go hello() // 啟動另外一個goroutine去執行hello函數fmt.Println("main goroutine done!")time.Sleep(time.Second) }執行會先打印main goroutine done!,然后緊接著打印Hello Goroutine!。因為我們在創建新的goroutine的時候需要花費一些時間,而此時main函數所在的goroutine是繼續執行的。
參考文章:http://www.topgoer.com/
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的golang协程介绍和理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows环境搭建golang的gi
- 下一篇: 电脑开机3秒就重启循环_移动办公神器!电