Dart多線程--事件循環(huán)(event loop)

在Dart中有兩種隊列:

1、事件隊列(event queue):包含所有的外來事件

2、微任務(wù)隊列(microtask queue):表示一個短時間內(nèi)就會完成的異步任務(wù),他的優(yōu)先級是最高的,高于事件隊列,只要隊列中有它,就會一直霸占著事件循環(huán),如果有太多的微任務(wù)隊列存在,可能會對事件隊列中的觸摸、繪制等外部事件造成一定的阻塞卡頓

//微任務(wù)創(chuàng)建? ?scheduleMicrotask((){})

在有微任務(wù)隊列時,會優(yōu)先執(zhí)行,then()也是添加進(jìn)微任務(wù)隊列中,


事件循環(huán)


Dart大多是在主線程完成,但在Dart中也有可以操作子線程,比如Isolate,它其實看起來像是進(jìn)程,因為有獨立的內(nèi)存空間,它的好處是:不用擔(dān)心多線程資源搶奪問題,不需要鎖。 不過它數(shù)據(jù)交互就比較麻煩。

Isolate使用

而Isolate要通信是需要ReceivePort支持的,如下:


Isolate通信

還有一個compute是在Isolate的上層封裝,能返回值,返回的是一個Future,也是子線程實現(xiàn)的一種方式:

compute實現(xiàn)子線程
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容