1. 程式人生 > >協程VS多執行緒 應用場景比對

協程VS多執行緒 應用場景比對

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

所以多執行緒在有些時候並不討巧。

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

看起來,協程可以完美替代多執行緒了。

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

使用多執行緒的目的之一是為了不阻塞主執行緒的迭代迴圈,讓主執行緒可以順暢執行,而協程的使用目的就只限於此。

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

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

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

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

檢查另一個協程是否結束 

甚至什麼不做 

更進一步歸納

協程的yield 就相當於 非同步函式的await

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

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

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

就可以用協程代替他。

當然多核處理的優勢是無論如何都沒法替代的,特別是在將來很有可能出現32執行緒甚至64執行緒的產品,

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