coroutine
協程的基本概念和設計目的:
1.遊戲開發中會遇到:並行邏輯:如同時載入多個資源
需要多幀執行的延續性邏輯:如尋路到某一點
同步這些並行和延續性邏輯:如現尋路到某一點,說一句話,在尋路到某一點
2.目的:輕型的並行概念
可以同步並行邏輯
避免多執行緒帶來的邏輯麻煩
3.概念:假的多執行緒概念
可以在某些點同步
可以對複雜邏輯分幀,可以在主線程內非阻塞的執行乙個持續性邏輯
4.舉個例子:寫iemurator
startcoroutine
要由mono發起
協程的實現原理
它會把複雜的操作分攤到每一幀的緩慢執行,不至於阻塞主線程,類似於update操作,就是在主線程中不斷的update
協程就是c#迭代器,就是定義乙個協程函式,返回值只能是ienumerator,不能有其他返回值,可以傳引數,引數不能有out和ref型別,使用yield返回結束當前幀,但是會記住當前執行的點到下一幀繼續執行,通過startcoroutine開啟協程。
c#迭代器:將一段邏輯分解到迭代器中
是另乙個update(),在每個update中執行一次迭代器,看一下mono的生命週期
每次yield都會離開本次執行,迭代器會記住這個位置和上下文,下一次update到這個協程從上次離開的位置開始執行
coroutine和多執行緒
coroutine不是多執行緒
coroutine是在主線程內每幀update,假的並行,還是在乙個主線程內做的事情,只不過是不同幀
因為不是多執行緒所以不用考慮變數的訪問時序
協程的幾種coroutine操作
協程的執行效率和時機
實際應用:定時器
實際應用:將複雜操作分幀-生成一張貼圖的灰度版本
AJAX中的同步載入與非同步載入
ajax是四個單詞的簡寫,其中asynchronous即非同步的意思,非同步的鏈結可以同時發起多個,並且不會阻止js 執行。與之對應的概念是同步,同步的鏈結在同一時刻只會有乙個,並且會阻止後續js 的執行,js必須等待同步鏈結載入完畢後才能繼續執行。ajax發展到現在,不但可以發起非同步鏈結,也可以...
小功能丨U3D非同步載入功能
假設當前場景為a,我們要切換到下一場景b,如果使用正常載入方式,unity會在切換場景時載入場景b的所有內容 hierarchy面板內容 到記憶體中,由於載入場景b是同步執行的,所以當場景b較大時,就會在載入過程出現卡頓現象 針對這種情況,我們通常會使用非同步載入方式來載入場景。非同步載入方式是在後...
笑談協同OA的功能
遠在老家農村的老媽,知道明天下午4點兒子開完會,而自家的菜園子也可以在下午3點半前澆完水。這叫日程管理和工作計畫安排 下午3 30,小侄女提前30分鐘到菜地找到老媽,提醒要去打 這叫工作提醒 老媽提出讓大侄子騎自行車帶他去鄉里 亭打 這叫共享資源申請 大侄子說那輛新自行車被他老爸騎走了,只有委曲坐那...