協程、線程、進程

前言:

    協程、線程和進程,可以說是面試必問,開發必接觸的問題了,有必要系統性地認識和理解它們。

協程:

遊戲開發中,協程一般分爲2種,一種是Unity的協程,一種是Lua的協程。Unity的協程可以參考我之前寫的一篇文章 Unity的協程。主要實現方式是利用C#的IEnumerator和Unity的Update()函數,在Unity的主線程中去檢測和執行協程。Lua協程的特點是一個Lua狀態機裏,在任何時刻都只能運行一個協程,也就是說Lua的協程不存在併發的情況。一個協程運行後,只有運行結束或者掛起,下一個協程才能得以運行。所以協程也不具有搶佔式。

協程從某個角度來講它就像是和硬件,資源,操作系統無關,由語言或引擎自身實現的邏輯分流,例如C++,C#是沒有協程的,而Unity和Lua實現了自己的協程。

協程的特點是切換速度快,性能消耗小。

線程:

定義:操作系統能夠進行運算調度的最小單位。

線程存在於進程中,是進程中實際運行的單位。一個線程是一個順序執行流,線程與線程之間存在異步性和搶佔性。同個進程裏面的多個線程,共享進程的系統資源,同時線程也擁有自己的獨立堆棧。

線程相對於進程來說,線程間切換的性能消耗較小,

線程與線程之間是異步的。

進程:

定義:是系統進行資源分配和調度的基本單位。(注意:進程是分配,線程是調用)

。一般來說,一個應用程序佔用操作系統的一個進程。進程的上下文切換比較複雜,性能消耗大。(上下文切換:一個進程在操作系統上運行,需要先把相關的數據寫入到CPU寄存器中,切換進程時,需要將當前進程的數據從CPU寄存器中移走,保存在自己進程的存儲空間裏,然後把將要運行的線程數據存儲到CPU寄存器中,這個過程成爲上下問切換。)

在多線程操作系統中,一個進程可以包含多個線程。

發佈了53 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章