3 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
沒有什么完全等效的,但是有兩個(gè)模塊可以提供滿足您需求的足夠類似的東西:
std.concurrency提供消息傳遞和有保證的隔離,除非使用
shared
限定符獲取非常有限的顯式共享內(nèi)存。但是,您(尚未)將光纖多路復(fù)用到goroutine提供的線程上?,F(xiàn)在,每次調(diào)用都會(huì)spawn
啟動(dòng)一個(gè)新的OS線程。同樣,還有一些工作要做,以使不變性足夠可用,以使這種范例發(fā)揮其全部潛力。有關(guān)此范例的更多信息,請(qǐng)參見Andrei Alexandrescu的“ D編程語(yǔ)言”的免費(fèi)章節(jié)。std.parallelism提供任務(wù)。它面向并行性,而不是并發(fā)性。 (即使您需要并發(fā)來(lái)實(shí)現(xiàn)并行性,這些也不是同一回事。) 因此,代替消息傳遞,任務(wù)只是執(zhí)行而不與調(diào)用線程進(jìn)行通信,然后將其返回值返回給調(diào)用線程。此外,如果任務(wù)多于線程,則多余的任務(wù)將排隊(duì),而不使用光纖進(jìn)行多路復(fù)用。
編輯:我最初是設(shè)計(jì)和編寫std.parallelism的,并且愿意考慮滿足您這樣的需求的增強(qiáng)請(qǐng)求,只要它們不會(huì)將模塊的范圍擴(kuò)展到一般情況下并發(fā)。如果std.parallelism幾乎可以滿足您的需求,但不能滿足您的要求,請(qǐng)?jiān)诖颂幓蛟赿igitalmars.d新聞組上發(fā)布功能請(qǐng)求。
另外,即使我可能不是這樣的請(qǐng)求的實(shí)現(xiàn)者,也可以建議對(duì)std.concurrency進(jìn)行增強(qiáng)。

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊
std.parallel使用線程池運(yùn)行任務(wù),但是您需要實(shí)現(xiàn)自己的消息傳遞例程(當(dāng)前在AFAIK庫(kù)中沒有線程安全隊(duì)列)

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
我不知道D庫(kù)是否可以為線程/光纖提供拆分堆棧支持。不幸的是,沒有它,很多Go goroutines的實(shí)用性就喪失了。
如果使用goroutines可以輕松解決一些問題,那么為什么不首先使用Go呢?
- 3 回答
- 0 關(guān)注
- 267 瀏覽
添加回答
舉報(bào)