區(qū)別:1、goroutine通過(guò)通道來(lái)通信,coroutine通過(guò)讓出和恢復(fù)操作來(lái)通信。2、goroutine協(xié)程間不完全同步,可以利用多核并行運(yùn)行;coroutine協(xié)程間完全同步,不會(huì)并行。3、goroutine可在多個(gè)協(xié)程/線(xiàn)程上切換;coroutine在一個(gè)線(xiàn)程中運(yùn)行。4、應(yīng)用程序長(zhǎng)時(shí)間大量地占用CPU,goroutine中用戶(hù)有權(quán)終止這個(gè)任務(wù),coroutine不行。
本教程操作環(huán)境:windows7系統(tǒng)、GO 1.18版本、Dell G3電腦。
C#、Lua、Python 語(yǔ)言都支持 coroutine 特性。coroutine 與 goroutine 在名字上類(lèi)似,都可以將函數(shù)或者語(yǔ)句在獨(dú)立的環(huán)境中運(yùn)行,但是它們之間有兩點(diǎn)不同:
-
goroutine 可能發(fā)生并行執(zhí)行;
-
但 coroutine 始終順序執(zhí)行。
goroutines 意味著并行(或者可以以并行的方式部署),coroutines 一般來(lái)說(shuō)不是這樣的,goroutines 通過(guò)通道來(lái)通信;coroutines 通過(guò)讓出和恢復(fù)操作來(lái)通信,goroutines 比 coroutines 更強(qiáng)大,也很容易從 coroutines 的邏輯復(fù)用到 goroutines。
狹義地說(shuō),goroutine 可能發(fā)生在多線(xiàn)程環(huán)境下,goroutine 無(wú)法控制自己獲取高優(yōu)先度支持;coroutine 始終發(fā)生在單線(xiàn)程,coroutine 程序需要主動(dòng)交出控制權(quán),宿主才能獲得控制權(quán)并將控制權(quán)交給其他 coroutine。
goroutine 間使用 channel 通信,coroutine 使用 yield 和 resume 操作。
goroutine 和 coroutine 的概念和運(yùn)行機(jī)制都是脫胎于早期的操作系統(tǒng)。
coroutine 的運(yùn)行機(jī)制屬于協(xié)作式任務(wù)處理,早期的操作系統(tǒng)要求每一個(gè)應(yīng)用必須遵守操作系統(tǒng)的任務(wù)處理規(guī)則,應(yīng)用程序在不需要使用 CPU 時(shí),會(huì)主動(dòng)交出 CPU 使用權(quán)。如果開(kāi)發(fā)者無(wú)意間或者故意讓?xiě)?yīng)用程序長(zhǎng)時(shí)間占用 CPU,操作系統(tǒng)也無(wú)能為力,表現(xiàn)出來(lái)的效果就是計(jì)算機(jī)很容易失去響應(yīng)或者死機(jī)。
goroutine 屬于搶占式任務(wù)處理,已經(jīng)和現(xiàn)有的多線(xiàn)程和多進(jìn)程任務(wù)處理非常類(lèi)似。應(yīng)用程序?qū)?CPU 的控制最終還需要由操作系統(tǒng)來(lái)管理,操作系統(tǒng)如果發(fā)現(xiàn)一個(gè)應(yīng)用程序長(zhǎng)時(shí)間大量地占用 CPU,那么用戶(hù)有權(quán)終止這個(gè)任務(wù)。
coroutine和goroutine的區(qū)別總結(jié)
區(qū)別一:
-
goroutine 通過(guò)通道來(lái)通信;
-
coroutine通過(guò)讓出和恢復(fù)操作來(lái)通信
區(qū)別二:
-
goroutine協(xié)程間不完全同步,可以利用多核并行運(yùn)行,具體要看channel的設(shè)計(jì);
-
coroutine協(xié)程間完全同步,不會(huì)并行
區(qū)別三:
-
goroutine可以在多個(gè)協(xié)程在多個(gè)線(xiàn)程上切換,既可以用到多核,又可以減少切換開(kāi)銷(xiāo)。
-
coroutine只在一個(gè)線(xiàn)程中運(yùn)行,只在一個(gè)線(xiàn)程中運(yùn)行
區(qū)別四:
-
goroutine操作系統(tǒng)如果發(fā)現(xiàn)一個(gè)應(yīng)用程序長(zhǎng)時(shí)間大量地占用 CPU,那么用戶(hù)有權(quán)終止這個(gè)任務(wù)。
-
coroutine如果開(kāi)發(fā)者無(wú)意間或者故意讓?xiě)?yīng)用程序長(zhǎng)時(shí)間占用 CPU,操作系統(tǒng)也無(wú)能為力,表現(xiàn)出來(lái)的效果就是計(jì)算機(jī)很容易失去響應(yīng)或者死機(jī)。
【