go 簡潔的并發
多核處理器越來越普及。有沒有一種簡單的辦法,能夠讓我們寫的軟件釋放多核的威力?是有的。隨著Golang, Erlang, Scala等為并發設計的程序語言的興起,新的并發模式逐漸清晰。正如過程式編程和面向對象一樣,一個好的編程模式有一個極其簡潔的內核,還有在此之上豐富的外延??梢越鉀Q現實世界中各種各樣的問題。本文以GO語言為例,解釋其中內核、外延。
前言
Java 中有一系列的線程同步的方法,go 里面有 goroutine(協程),先看下下面的代碼執行的結果是什么呢?
1
2
3
4
5
6
7
8
9
10
11
12
|
package main import ( "fmt" ) func main() { go func() { fmt .Println( "Goroutine 1" ) }() go func() { fmt .Println( "Goroutine 2" ) }() } |
執行以上代碼很可能看不到輸出。
因為有可能這兩個協程還沒得到執行,主協程就已經結束了,而主協程結束時會結束所有其他協程,所以導致代碼運行的結果什么都沒有。
估計不少新接觸 go 的童鞋都會對此郁悶