go總結 併發

2021-10-19 05:19:29 字數 1730 閱讀 4802

主要學習了菜鳥程式設計: go 併發

總結:go func 可以起乙個執行緒,輕量級的執行緒,執行緒之間採用chan進行傳值。

package main

import

"fmt"

func

sum(s [

]int

, c chan

int)

c <- sum // 把 sum 傳送到通道 c

}func

main()

// 緩衝區大小為2

c :=

make

(chan

int,2)

gosum

(s[:

len(s)/2

], c)

gosum

(s[len

(s)/2:

], c)

x, y :=

<-c,

<-c // 從通道 c 中接收

fmt.

println

(x,"+"

, y,

"=", x+y)

}

輸出

-5+

17=12

另乙個例子

package main

import

("fmt"

)func

fibonacci

(n int

, c chan

int)

close

(c)//關閉

}func

main()

}

package main

import

("fmt"

"time"

)func

say(s string)}

func

say2

(s string)}

func

main()

輸出

hello 100

world 150

hello 200

world 300

hello 300

hello 400

world 450

hello 500

只輸出三次world,因為mian已經退出了,所以結束了,沒阻塞。

解決:採用通道傳值進行阻塞,因為通道寫和讀都是阻塞的。

package main

import

("fmt"

"time"

)func

say(s string)}

func

say2

(s string

, ch chan

int)

ch <-

0close

(ch)

}func

main()

輸出

hello 100

world 150

hello 200

hello 300

world 300

hello 400

world 450

hello 500

world 600

world 750

0

Go語言的併發簡單總結

goexit結束當前goroutine,會呼叫defer,不會產生panic 1.6.扇入扇出 fan in fan out 1.7 通知退出機制 通知退出機制是學習使用context庫的基礎 lable for 2.併發正規化 2.1 生成器 2.2 管道 輸入輸出都是chan的時候,鏈式呼叫 2...

go學習 goroutine併發學習總結

go最大的特性就是併發了,所以這一塊是go的重點知識,我自己花了一些時間,好好學習這個基礎知識。文章內容為個人學習理解,所以文章如果有不對之處,非常感謝指出。說起go併發,一般都會指go協程,即goroutine,而實現goroutin的關鍵字就是go。我學習go併發用到的關鍵字總結 sync.mu...

Go語言併發

協程 本質上是一種使用者態執行緒,不需要作業系統來進行搶占式排程,且在真正的實現重寄存於執行緒中,因此,系統開銷極小,可以有效提高執行緒的任務併發性,從而避免多執行緒的缺點。使用協程的優點是程式設計簡單,結構清晰 缺點是需要語言的支援。協程最大優勢 輕量級 可以輕鬆建立上百萬個而不會導致系統資源衰竭...