新聞中心
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ā)生在多線程環(huán)境下,goroutine 無(wú)法控制自己獲取高優(yōu)先度支持;coroutine 始終發(fā)生在單線程,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)有的多線程和多進(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,那么用戶有權(quán)終止這個(gè)任務(wù)。
文章標(biāo)題:創(chuàng)新互聯(lián)GO教程:goroutine和coroutine的區(qū)別
本文路徑:http://www.dlmjj.cn/article/dhsgihc.html


咨詢(xún)
建站咨詢(xún)
