Golang:協(xié)程

協(xié)程(Goroutine)是與其他函數(shù)或方法同時運行的函數(shù)或方法投放∧卫幔可以認(rèn)為它是輕量級的線程。與線程相比跪呈,創(chuàng)建 Goroutine 的成本很小段磨。因此,Go 應(yīng)用程序可以有上千個 Goroutines 同時運行耗绿。

在函數(shù)或方法調(diào)用之前加上關(guān)鍵字 go苹支,這樣便開啟了一個并發(fā)的 Goroutine。

package main

import (  
    "fmt"
)

func hello() {  
    fmt.Println("Hello world goroutine")
}
func main() {  
    go hello()
    fmt.Println("main function")
}

go hello() 開啟了一個新的協(xié)程∥笞瑁現(xiàn)在 hello() 函數(shù)將和 main() 函數(shù)一起運行债蜜。main() 函數(shù)在單獨的協(xié)程中運行,這個協(xié)程稱為主協(xié)程究反。

運行上面的程序?qū)H輸出一行文本: main function寻定。

原因:

  • 當(dāng)創(chuàng)建一個 Go 協(xié)程時,創(chuàng)建這個 Go 協(xié)程的語句立即返回并向下繼續(xù)執(zhí)行精耐。與函數(shù)不同狼速,程序流程不會等待 Go 協(xié)程結(jié)束再繼續(xù)執(zhí)行。

  • 在主協(xié)程存在時才能運行其他協(xié)程卦停,主協(xié)程終止則程序終止向胡,其他協(xié)程也將終止。

package main

import (  
    "fmt"
    "time"
)

func hello() {  
    fmt.Println("Hello world goroutine")
}
func main() {  
    go hello()
    time.Sleep(1 * time.Second)
    fmt.Println("main function")
}

開啟多個協(xié)程:

package main

import (  
    "fmt"
    "time"
)

func numbers() {  
    for i := 1; i <= 5; i++ {
        time.Sleep(250 * time.Millisecond)
        fmt.Printf("%d ", i)
    }
}
func alphabets() {  
    for i := 'a'; i <= 'e'; i++ {
        time.Sleep(400 * time.Millisecond)
        fmt.Printf("%c ", i)
    }
}
func main() {  
    go numbers()
    go alphabets()
    time.Sleep(3000 * time.Millisecond)
    fmt.Println("main terminated")
}

下面的圖片描述了這個程序是如何工作的:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惊完,一起剝皮案震驚了整個濱河市僵芹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌小槐,老刑警劉巖拇派,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異凿跳,居然都是意外死亡件豌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門控嗜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茧彤,“玉大人,你說我怎么就攤上這事躬审〖郑” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵承边,是天一觀的道長遭殉。 經(jīng)常有香客問我,道長博助,這世上最難降的妖魔是什么险污? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮富岳,結(jié)果婚禮上蛔糯,老公的妹妹穿的比我還像新娘。我一直安慰自己窖式,他們只是感情好蚁飒,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著萝喘,像睡著了一般淮逻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阁簸,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天爬早,我揣著相機與錄音,去河邊找鬼启妹。 笑死筛严,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饶米。 我是一名探鬼主播桨啃,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咙崎!你這毒婦竟也來了优幸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤褪猛,失蹤者是張志新(化名)和其女友劉穎网杆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伊滋,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡碳却,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了笑旺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昼浦。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖筒主,靈堂內(nèi)的尸體忽然破棺而出关噪,到底是詐尸還是另有隱情鸟蟹,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布使兔,位于F島的核電站建钥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏虐沥。R本人自食惡果不足惜熊经,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望欲险。 院中可真熱鬧镐依,春花似錦、人聲如沸天试。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秋秤。三九已至宏粤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灼卢,已是汗流浹背绍哎。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鞋真,地道東北人崇堰。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像涩咖,于是被迫代替她去往敵國和親海诲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容