Go協(xié)程并發(fā)之百萬級(jí)并發(fā)「讓我們一起Golang」

      網(wǎng)友投稿 1069 2025-04-02

      Go協(xié)程并發(fā)之百萬級(jí)并發(fā)「讓我們一起Golang」

      前面我們介紹了關(guān)于Golang的協(xié)程并發(fā)的一些理論知識(shí),接下來我們上代碼,通過代碼帶大家了解一下Go的協(xié)程并發(fā),體驗(yàn)Go的百萬級(jí)并發(fā)。

      我們先來了解一下進(jìn)程、線程、協(xié)程的區(qū)別吧!

      進(jìn)程有自己獨(dú)立的堆和棧,而線程雖然擁有獨(dú)立的棧,但是它的堆是共享的。而我們這里要講的協(xié)程和線程是一樣的,也是只共享堆,而不共享?xiàng)!5菂f(xié)程不像進(jìn)程和線程那樣由操作系統(tǒng)調(diào)度,而是由程序員來調(diào)度,這樣就可以節(jié)省資源,提高性能

      下面來看看主協(xié)程和一條協(xié)程在并發(fā)執(zhí)行時(shí)的表現(xiàn)吧!

      func main() { go func() { for{ fmt.Println("i am coroutine") time.Sleep(time.Second) } }() for{ fmt.Println("我是主協(xié)程") time.Sleep(time.Second) } }

      他們運(yùn)行結(jié)果是:

      我是主協(xié)程 i am coroutine i am coroutine 我是主協(xié)程 我是主協(xié)程 i am coroutine i am coroutine 我是主協(xié)程 i am coroutine 我是主協(xié)程

      Go協(xié)程并發(fā)之百萬級(jí)并發(fā)「讓我們一起Golang」

      我們可以看到,他們并不是順序執(zhí)行的,而是并發(fā)執(zhí)行的,這就是協(xié)程并發(fā)。

      func main() { //但是開啟100條小協(xié)程是主協(xié)程干的 //迅速開啟100條小協(xié)程 for i:=0;i<10;i++{ go doSomething("面包人"+strconv.Itoa(i)) } for{ fmt.Println("我是主協(xié)程") time.Sleep(time.Second) } } func doSomething(grname string) { for{ fmt.Println("來了一車",grname) time.Sleep(time.Second) } }

      來了一車 面包人0 來了一車 面包人7 來了一車 面包人8 我是主協(xié)程 來了一車 面包人2 來了一車 面包人6 來了一車 面包人3 來了一車 面包人1 來了一車 面包人5 來了一車 面包人9 來了一車 面包人4 來了一車 面包人0 來了一車 面包人8 來了一車 面包人1 來了一車 面包人2 來了一車 面包人4 來了一車 面包人7 來了一車 面包人3 來了一車 面包人9 來了一車 面包人5 我是主協(xié)程 來了一車 面包人6 來了一車 面包人1 來了一車 面包人4

      這里體驗(yàn)的是11條協(xié)程并發(fā)。是主協(xié)程喚起了十條協(xié)程,然后才有一車車面包人來打你。因此主協(xié)程是那個(gè)打電話喊面包人打你的人。也就是說主協(xié)程開啟了10條協(xié)程。但是這十一條協(xié)程是并發(fā)的,他們不是順序執(zhí)行的。雖然是并發(fā)執(zhí)行的,但是在微觀上每次還是只能執(zhí)行一條協(xié)程,但是他們的執(zhí)行順序和創(chuàng)建順序是不一致的。

      然后將

      for i:=0;i<10;i++{ go doSomething("面包人"+strconv.Itoa(i)) }

      改為

      for i:=0;i<1000000;i++{ go doSomething("面包人"+strconv.Itoa(i)) }

      這就是百萬級(jí)并發(fā)了!

      一個(gè)主協(xié)程可以喊100萬車面包人打你。

      經(jīng)過測試,程序持續(xù)1分鐘都沒有崩潰。事實(shí)證明,執(zhí)行協(xié)程只需要消耗極少的內(nèi)存和CPU資源,所以我們可以創(chuàng)建一百萬條協(xié)程。16G內(nèi)存的電腦,用JAVA,C來做并發(fā),差不多也就千級(jí)并發(fā),而用GO語言,通過管道可以讓并發(fā)能力得到很大提升,我們這里實(shí)現(xiàn)了百萬級(jí)并發(fā)。

      goroutine是協(xié)作式調(diào)度的,而Java等的使用的線程是搶占式調(diào)度的。

      Go 任務(wù)調(diào)度

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:垂直領(lǐng)域aPaaS的作用(apaas與ipaas區(qū)別)
      下一篇:如何將視頻旋轉(zhuǎn)
      相關(guān)文章
      亚洲国产精品成人午夜在线观看 | 亚洲啪AV永久无码精品放毛片| 亚洲国产一区视频| 亚洲精品美女网站| 亚洲成a人片77777老司机| 国产亚洲av片在线观看18女人| 亚洲国产精品成人| 亚洲国产精品不卡毛片a在线| 亚洲av成人无码网站…| 国产亚洲一卡2卡3卡4卡新区 | 亚洲国产成人片在线观看 | 亚洲欧洲日韩极速播放| 亚洲砖码砖专无区2023| 亚洲色偷精品一区二区三区| 亚洲免费网站观看视频| 亚洲Av无码国产一区二区| 亚洲av无码av在线播放| 亚洲爆乳成av人在线视菜奈实| 色九月亚洲综合网| 亚洲情侣偷拍精品| 亚洲精品乱码久久久久久久久久久久 | 亚洲日本中文字幕区| 亚洲一区二区三区日本久久九| 亚洲综合在线观看视频| 亚洲午夜久久久久久尤物| 亚洲粉嫩美白在线| 99亚洲乱人伦aⅴ精品| 亚洲精品国产自在久久| 亚洲色大成网站www永久一区| 国产亚洲高清不卡在线观看| 亚洲va在线va天堂va不卡下载| 亚洲电影在线播放| 亚洲人配人种jizz| 蜜芽亚洲av无码一区二区三区| 亚洲国产一区二区视频网站| 亚洲欧洲国产精品香蕉网| 无码乱人伦一区二区亚洲| 亚洲日本国产精华液| 国产精品亚洲综合五月天| 亚洲AV永久无码精品放毛片| 亚洲人成网站在线观看青青|