Golang學習筆記(十八):併發編程初體驗

Go語言是在語言層級上支持併發編程的,也就是原生編程,其餘的編程語言實際併發編程須要借一些擴展庫,而Go語言不須要。編程

傳統的併發編程模型,即多線程併發模型,不一樣的線程之間經過共享內存來達到線程通訊的目的。bash

而Go語言雖然也支持經過鎖的模式來實現傳統併發模型,但在Go語言中,更強大仍是對CSP(順序通訊進程)併發模型的支持。多線程

在Go語言併發開發,最重要一句話是:併發

不要經過共享內存實現通訊,而要經過通訊實現內存共享編程語言

Go的併發編程模型只有兩個概念:goroutine(協程)和channel(通道)。函數

若是你有其餘編程語言併發開發的經驗,能夠先把goroutine理解爲線程,固然goroutine和線程仍是有本質上差異的。ui

而channel則是不一樣gorouine通訊的通道。spa

Go語言程序運行時,入口main函數所在的goroutine叫main goroutine。線程

在Go語言中,使用關鍵詞go即可以輕鬆建立一個goroutine,開啓併發編程。code

package main

import "fmt"

func main(){
    
    go test()
    fmt.Println("goroutine test1")
}

func test(){
    .Println("goroutine test2")
}

複製代碼

在上面的示例中,咱們可能會看到test()函數中的輸出,這是主函數退出時,全部goroutine都會退出執行。

package main

import "fmt"
import "time"

func main(){
    
    go test()
    fmt.Println("goroutine test1")
    time.Sleep(time.Second)
}

func test(){
    .Println("goroutine test2")
}

複製代碼

經過time.Sleep()函數,使用主函數在一秒鐘後退出,咱們能夠看到test()函數所在的gotoutine也會執行。

相關文章
相關標籤/搜索