協程VS多線程 應用場景比對

衆所周知 ,多線程除了會給cpu帶來切換上下文的開銷,還會產生資源競爭,想要用多線程,免不了這裏那裏加個鎖。

所以多線程在有些時候並不討巧。

所以,協程出現了,他也可以併發的執行多線邏輯,但完全不會給cpu帶來額外負擔,且不存在任何資源競爭。

看起來,協程可以完美替代多線程了。

但其實,協程也只是在特定應用情境下才適用。

使用多線程的目的之一是爲了不阻塞主線程的迭代循環,讓主線程可以順暢運行,而協程的使用目的就只限於此。

那些需要計算,可能在同一幀內做大量運算的事情,就無法靠協程去併發。因爲他們也會加大主線程在一幀內的計算量,一樣會造成卡幀。

所以協程做的基本上是一些檢查工作

檢查一個計時器是否到了指定的時間 

檢查一個下載是否已經完成 

檢查另一個協程是否結束 

甚至什麼不做 

更進一步歸納

協程的yield 就相當於 異步函數的await

區別是 yield背後執行的每幀檢查工作在主線程 且每次檢查幾乎不費事

而await 後面跟的是一個Task 一個可能需要花上很久才能結束的多線程任務

(其實,理論上感覺,只要這個task的邏輯可以分成多幀去執行 且可以控制好每幀的計算量

就可以用協程代替他。

當然多核處理的優勢是無論如何都沒法替代的,特別是在將來很有可能普及32線程甚至64線程的產品,

一個協程就想以一敵百嗎,縱使你有百般能耐,也不可能以一敵百....)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章