行程 執行緒 協程
什么是行程?
直白地講,行程就是應用程式的啟動實體,比如我們運行一個游戲,打開一個軟體,就是開啟了一個行程,
行程擁有代碼和打開的檔案資源、資料資源、獨立的記憶體空間,
什么是執行緒?
行程中的一個執行任務(控制單元),負責當前行程中程式的執行,一個行程至少有一個執行緒,一個行程可以運行多個執行緒,多個執行緒可共享資料,
與行程不同的是同類的多個執行緒共享行程的堆和方法區資源,但每個執行緒有自己的程式計數器、虛擬機堆疊和本地方法堆疊,所以系統在產生一個執行緒,或是在各個執行緒之間作切換作業時,負擔要比行程小得多,也正因為如此,執行緒也被稱為輕量級行程,
執行緒從屬于行程,是程式的實際執行者,一個行程至少包含一個主執行緒,也可以有更多的子執行緒,
執行緒擁有自己的堆疊空間,
總結:
對作業系統來說,執行緒是最小的執行單元,行程是最小的資源管理單元,

(圖源自網路)
什么是協程
**協程,英文Coroutines,是一種比執行緒更加輕量級的存在,**正如一個行程可以擁有多個執行緒一樣,一個執行緒也可以擁有多個協程,
通常情況下執行緒運行遇到阻塞,CPU在當前函式的計算之外是停止的,這樣會有大量資源浪費,因此出現了協程,一條執行緒中有多個任務在交替進行,其中的一個任務就是一個協程
例如,在一條執行緒中,兩個任務在同一個時間軸交替運行,但對外來講仍然是一條執行緒,因為切換的速度非常快,好像在做一件事情一樣,其實系統在做好多事情

(圖源自網路)
多行程和多執行緒區別
多行程:作業系統中同時運行的多個程式
多執行緒:在同一個行程中同時運行的多個任務
舉個例子,多執行緒下載軟體,可以同時運行多個執行緒,但是通程序式運行的結果發現,每一次結果都不一致, 因為多執行緒存在一個特性:隨機性,造成的原因:CPU在瞬間不斷切換去處理各個執行緒而導致的,可以理解成多個執行緒在搶CPU資源,

多執行緒并不能提高運行速度,但可以提高運行效率,讓CPU的使用率更高,但是如果多執行緒有安全問題或出現頻繁的背景關系切換時,運算速度可能反而更低,
而且執行緒在運行的時候會出現阻塞的情況,極大的浪費了CPU的資源,這時,使用協程分開使用空間,會極大提高CPU利用率
Unity 協程
協程的英文是Coroutine
一個協程是通過一個方法來定使用,因此在使用協程之前要寫一個帶有IEnumerator類的回傳值的方法
Unity協程應注意的點
- 協程所在腳本關閉的時候協程不會停止,但是協程所在的游戲物件洗掉的時候協程將會被系統回收
- 關于協程的關閉,下面會詳解
- 協程的回傳值必須是
IEnumerator - 協程的內部必須要有
yield return來暫停協程使用 - 協程可以多載
- 協程可以多次呼叫,但是不可以關閉后繼續運行,只能重新開啟協程
- 協程可以嵌套
- 協程的引數不能使用 ref 和 out 修飾
- 協程在執行完內部所有代碼的時候會退出協程
關于協程yield return 后面的值
yiled return 0;0可以換成任意的int型別的值,都是當前暫停一幀,從下一幀開始執行yiled return協程,yiled return后面可以跟一個協程,當執行到該行代碼的時候執行yiled return后面的協程,如果下面還有代碼在執行完該協程的時候,回來繼續執行.yiled return后面可以跟一個WWW類,當下載完成該WWW類的時候,繼續向下面的代碼執行yiled return new WaitForSeconds(時間),時間可以隨意設定,該方法主要作用是等待幾秒鐘后執行yiled return后面的代碼;yiled return后面可以跟一個類,等等根據自己的需要進行使用
開啟協程和關閉協程
-
直接使用協程方法名
開啟協程
StartCoroutine(“協程方法名 “);關閉協程
StopCoroutine(“協程方法名 “); -
使用協程方法名加引數
開啟協程
StartCoroutine(“協程方法名”,引數);<該方法只適用于協程只有一個引數的時候>關閉協程
StopCoroutine(“協程方法名”); -
使用方法
開啟協程
StartCoroutine(協程方法名(引數));<該方法中的引數個數隨意關閉協程
StopCoroutine(協程方法名(引數));<該方法不能關閉該協程,但是開啟可以使用>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/300821.html
標籤:其他
上一篇:蓋婭互娛 面經 測驗
下一篇:用c語言實作三子棋小游戲
