并发编程——协程
一、引子
基于單線程來實現(xiàn)并發(fā),即只用一個主線程(可利用的cpu只有一個)情況下實現(xiàn)并發(fā)(并發(fā)的本質(zhì):切換+保存狀態(tài))該怎么搞。
cpu正在運(yùn)行一個任務(wù),會在兩種情況下切走去執(zhí)行其他的任務(wù)(切換由操作系統(tǒng)強(qiáng)制控制),一種情況是該任務(wù)發(fā)生了阻塞,另外一種情況是該任務(wù)計算的時間過長或有一個優(yōu)先級更高的程序替代了它。
在介紹進(jìn)程理論時,提及進(jìn)程的三種執(zhí)行狀態(tài),而線程才是執(zhí)行單位,所以也可以將上圖理解為線程的三種狀態(tài)。
第一種情況的切換。在任務(wù)一遇到io情況下,切到任務(wù)二去執(zhí)行,這樣就可以利用任務(wù)一阻塞的時間完成任務(wù)二的計算,效率的提升就在于此。
第二種情況的切換并不能提升效率,只是為了讓cpu能夠雨露均沾,實現(xiàn)看起來所有任務(wù)都被“同時”執(zhí)行的效果,如果多個任務(wù)都是純計算的,這種切換反而會降低效率。
為此我們可以基于yield來驗證,yield本身就是一種在單線程下可以保存任務(wù)運(yùn)行狀態(tài)的方法,我們來簡單復(fù)習(xí)一下:
1 yiled可以保存狀態(tài),yield的狀態(tài)保存與操作系統(tǒng)的保存線程狀態(tài)很像,但是yield是代碼級別控制的,更輕量級 2 sen總結(jié)
- 上一篇: 买房子,就该用线性回归
- 下一篇: ASCII码八、十、十六进制对照表