goroutine
是一個輕量級的執行執行緒。
假設有一個函式呼叫f(s)
。 下面是以通常的方式呼叫它,同步執行它。
要在goroutine
中呼叫此函式,請使用go f(s)
。 這個新的goroutine
將與呼叫同時執行。
也可以為匿名函式呼叫啟動一個goroutine
。
兩個函式呼叫現在在不同的goroutine
中非同步執行,所以執行到這裡。這個ScanIn程式碼要求我們在程式退出之前按一個鍵。
當我們執行這個程式時,首先看到阻塞呼叫的輸出,然後是兩個gouroutines
的交替輸出。 這種交替反映了Go執行時並行執行的goroutine
。
接下來,我們來看看在並行Go程式中goroutines
的一個補充:channels
。
所有的範例程式碼,都放在
F:\worksp\golang
目錄下。安裝Go程式設計環境請參考:/2/23/798.html
goroutines.go
的完整程式碼如下所示 -
package main
import "fmt"
func f(from string) {
for i := 0; i < 3; i++ {
fmt.Println(from, ":", i)
}
}
func main() {
// Suppose we have a function call `f(s)`. Here's how
// we'd call that in the usual way, running it
// synchronously.
f("direct")
// To invoke this function in a goroutine, use
// `go f(s)`. This new goroutine will execute
// concurrently with the calling one.
go f("goroutine")
// You can also start a goroutine for an anonymous
// function call.
go func(msg string) {
fmt.Println(msg)
}("going")
// Our two function calls are running asynchronously in
// separate goroutines now, so execution falls through
// to here. This `Scanln` code requires we press a key
// before the program exits.
var input string
fmt.Scanln(&input)
fmt.Println("done")
}
執行上面程式碼,將得到以下輸出結果 -
F:\worksp\golang>go run goroutines.go
direct : 0
direct : 1
direct : 2
goroutine : 0
goroutine : 1
goroutine : 2
going
123456
done