這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
28.蛤蟆筆記go語言——並發簡單樣本
並發樣本
package main
import (
"fmt"
"time"
)
func ready(w string, sec int64) {
secs :=time.Duration(sec) * time.Second
time.Sleep(secs)
fmt.Println(w,"is ready!")
}
func main() {
goready("Tee", 2)
goready("Coffee", 1)
fmt.Println("I'mwaiting")
secs :=time.Duration(2) * time.Second
time.Sleep(5* secs)
}
輸出:
I'mwaiting
Coffeeis ready!
Teeis ready!
Go文法特點
沒有共用記憶體,更沒有記憶體鎖,並發靠語言內建的 goroutines
goroutines 之間的通訊靠語⾔內建的 channels 來傳遞訊息
總之,這⼀切都有利於簡單地編寫安全的並發程式。
並行計算
代碼:
package main
import "fmt"
func sum(values []int, resultChan chan int) {
sum :=0
for _,value := range values {
sum+= value
}
resultChan<- sum //將計算結果發送到channel中
}
func main() {
values:= []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
resultChan:= make(chan int, 2)
gosum(values[:len(values)/2], resultChan)
gosum(values[len(values)/2:], resultChan)
sum1,sum2 := <-resultChan, <-resultChan //接收結果
fmt.Println("Result:",sum1, sum2, sum1+sum2)
}
執行結果
Result: 40 15 55