1樓:
dotnet的async/await有個問題是,它可並不保證非同步哦Go:package
main
import
("fmt"
"sync"
)func
hello(wg
*sync
.WaitGroup,i
int)
func
main
()fmt
.Println
("main")wg
.Wait()}
輸出main
hello 9
hello 1
hello 0
hello 4
hello 6
hello 7
hello 5
hello 8
hello 2
hello 3
dotnet:
using
System
;using
System.Collections.Generic;using
System.Threading.Tasks;public
class
Program
Console
.WriteLine
("main"
);Task
.WaitAll
(tasks
.ToArray
());
}private
static
async
Task
Hello
(inti)
");}}
輸出hello 0
hello 1
hello 2
hello 3
hello 4
hello 5
hello 6
hello 7
hello 8
hello 9
main
注意這裡的hello是絕對同步執行的,不是隨機的剛好按順序執行哦把await Task.Delay(0).ConfigureAwait(false);
改成await Task.Delay(1).ConfigureAwait(false);
或者await Task.Run(()=>{}).ConfigureAwait(false);
才是真非同步,輸出
main
hello 9
hello 6
hello 7
hello 8
hello 2
hello 1
hello 3
hello 5
hello 4
hello 0
2樓:毛鳴
[1,2,3].
forEach
(async(n
)=>);JS 中不能這樣寫,因為 Array.prototype.forEach 本身沒有考慮 async 函式。
你可以自己寫乙個支援 async 的 forEach,然而一般情況下這個 forEach 是別人寫的,當然生態發展好了的話這個不是問題。
Stackful coroutine 沒有這個問題。
至於這算不算 async/await 的缺點,還是說是乙個微不足道的小特性甚至優點,見仁見智吧……
3樓:陳厚來
async/await更優。
如果測試多工,兩個方案:
用nodejs的async/await或者promise實現用boost::coroutine或swapcontent實現測試併發任務數不用多,10k以上,你會發現nodejs居然比c/c++還快。
為什麼,c/c++時間耗費在coroutine的儲存/恢復暫存器上了。
4樓:豈丈夫
從複雜度管理的角度上,我覺得stackfull coroutine是要優於async/await
coroutine可以在底層庫就將非同步的複雜度近乎完全遮蔽掉,可以極大地減輕心智負擔。 這點是async/await比不了的。
關於coroutine, promise, async, await
5樓:ggffss
說實話就我使用下來感覺是,goroutine+chan+select 這種模式要優於 async/await
原因是因為前者完整地提供了一整套並行程式設計的方案(資料同步等)。更像乙個開放式的流水線。
而 async/await 這種還不足以與之相提並論。僅僅只是非同步 (一種暗箱,黑盒)。
另外從思維理解上來說,goroutine的方式也更加便於理解。而 async/await 其實是有點莫名其妙的。
這裡有一篇駁老趙的文章:為什麼goroutine和channel不是以類庫的形式存在--駁老趙《為什麼我認為goroutine和channel是把別的... - 推酷
更新:暗箱黑盒的描述其實不夠準確。其實我只想表達go語言的協程簡單寫起來簡單看起來也很簡單。簡單的就是好的。
我想表達的意思也就是這麼簡單不好意思真沒那麼複雜好麼 ╮(╯▽╰)╭。
6樓:蘇維
async/await和stackfull co不是同一層的概念,不能預設前者就是stackless co,c#的也不全然都是,也看到有其他答主提到了幾種工作在不同級別的async/await實現方式。
——不過不糾結了。
在流行語言中,分別只對比c#和go的對應實現來看的話,明顯前者寫著不會更費事,效能卻好的多,具體實現上的細節有其他答主闡明得很詳細了。
題主問這個問題顯然不接受否定的答案,他只是想看看多少人持有相同的看法吧。
7樓:
async / await 是用於流程控制,且只用於表達非同步流程,需要配合其他併發機制,才能發揮作用。coroutine 是併發機制,用於表達概念上同時進行的過程。兩個正交的概念,沒有優劣之分。
換句話說,沒有 coroutine 或者 OS 執行緒等設施,async / await 就沒用了。還有,在執行期,是沒有 async / await 這個概念的,只有 coroutine 或者 OS 執行緒,這是根本的不同。
不需要分配棧記憶體?那非同步的操作,是誰幫你做了?還不是其他併發單元!
Nodejs中的非同步到底是優勢還是劣勢?
zy445566 例子,比如實現curl功能,傳統來說就是等待請求返回的時候是CPU不斷的判斷是否請求返回。而nodejs來說既然請求始終是要一定的時間,那我就把你放到佇列裡面,等會再判斷是否返回。那麼等待返回的時間裡,傳統做法是讓CPU就不斷地死迴圈判斷是否請求返回 這時就阻塞了,浪費大量沒必要的...
高達模型 為什麼明明是盜版的模型還會炒成很貴的海景房?
ExShepherd 看了一下,都在說中國產優勢,我說個萬代的問題。萬代整體在進行調整,人員新老交替,磨合階段新模少於是就給其他人有了可乘之機。接下來人事磨合基本完成,市場掃清,看看今年的MG和RE,1 100要回來了。 10年前甚至20年前就有人做盜版的高達模型,但那時候盜版的模型質量很差,和B社...
什麼程式語言機制是處理非同步 IO 最恰當的抽象?
何志斌 目前看,最好的方式還是async和await。2017年7月1日修改 也許使用者態多執行緒 協程 這種方式更好。我需要一些時間去實驗一下Go Kotlin king wt 真夠 乎的,你寫的接觸的,天天看的 互動事件都是事件非同步驅動的,你天天用的 伺服器是事件非同步驅動的。如果程式不建立監...