進程,線程,協程

這是我對這幾個程的認識,會不斷刷新認知。

進程和線程

  • 一個進程,即對應任務管理器一條process

  • 一個應用程序至少會開啓一個進程<也有多進程,點開Chrome就知道了>

  • 而一個進程至少有一個線程,線程間共享該進程的資源。

  • 線程是一個執行流,是CPU調度基本單位<意味着咱可以爲了搶CPU的服務,啓多線程>

  • 但是多線程是爲了同步完成多項任務,不是爲了提高運行效率,而是爲了提高資源使用效率來提高系統的效率(這個我沒理解到,感覺還是爲了運行效率)。線程是在同一時間需要完成多項任務的時候實現的。

  比喻<來自:http://www.cnblogs.com/Autumoon/archive/2008/06/19/1225684.html>:  假設一家搬家公司。假如我們把公司看做是一個進程,那麼人就是其中的線程。進程必須得有一個主線程,公司在創業初期往往可能出現一人打天下的現象,但是,至少得有一個人,公司才能運作。公司創業初期,業務還不算太多,往往就是老闆一個人身兼數職,一天如果只有1、2趟活兒,應該還是忙得過來的。時間長了,隨着業務的發展、口碑的建立,生意越來越興隆,一個人肯定就忙不過來了。假設一天有5個活兒,老闆一個人必須搬完A家才能搬B家,搬到黃昏估計也就搬到C家,D和E家都還在焦急地等待着呢。老闆一個人要充當搬運工、司機、業務聯繫人、法人代表、出納等衆多角色,累死累活公司的規模也上不去,人手不夠制約了公司的發展。那麼怎麼辦,很簡單,增加人手,用編程的話來說就是“再起個線程”。

協程

前提,我得提一下函數的調用(j_0060.gif回到這麼基礎了)。我們都知道A函數調用B函數,會事先保存現場,A函數入棧。B函數執行完後,A函數出棧,繼續進下去。

  • 協程不是線程,線程是由CPU調度,協程是程序員自己調度。

  • 協程打破函數的執行順序,讓子程(函數)間--“協同戰”。

  • yield開始,當前點上下文保存,主動讓出CPU(當前線程不一定馬上掛起哈,當前現場被保存,暫時返回,線程其它順序流繼續執行完,真正讓出cpu),CPU再次調度到當前線程,線程會檢查所有協程保存點(unity是在每幀update之後),檢查yeild條件是否滿足,若滿足,回到現場,繼續未完成的工作。不滿足繼續離開。


下圖是我對線程中協程的理解:

spacer.gifwKioL1PaVRqh1VNeAAGqdKk4RuA819.jpg


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