go 簡(jiǎn)潔的并發(fā)
多核處理器越來(lái)越普及。有沒有一種簡(jiǎn)單的辦法,能夠讓我們寫的軟件釋放多核的威力?是有的。隨著Golang, Erlang, Scala等為并發(fā)設(shè)計(jì)的程序語(yǔ)言的興起,新的并發(fā)模式逐漸清晰。正如過程式編程和面向?qū)ο笠粯樱粋€(gè)好的編程模式有一個(gè)極其簡(jiǎn)潔的內(nèi)核,還有在此之上豐富的外延。可以解決現(xiàn)實(shí)世界中各種各樣的問題。本文以GO語(yǔ)言為例,解釋其中內(nèi)核、外延。
前言
Java 中有一系列的線程同步的方法,go 里面有 goroutine(協(xié)程),先看下下面的代碼執(zhí)行的結(jié)果是什么呢?
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" ) }() } |
執(zhí)行以上代碼很可能看不到輸出。
因?yàn)橛锌赡苓@兩個(gè)協(xié)程還沒得到執(zhí)行,主協(xié)程就已經(jīng)結(jié)束了,而主協(xié)程結(jié)束時(shí)會(huì)結(jié)束所有其他協(xié)程,所以導(dǎo)致代碼運(yùn)行的結(jié)果什么都沒有。
估計(jì)不少新接觸 go 的童鞋都會(huì)對(duì)此郁悶