協同函式與非同步載入的功能

2022-09-05 08:30:12 字數 1636 閱讀 3836

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分鐘到菜地找到老媽,提醒要去打 這叫工作提醒 老媽提出讓大侄子騎自行車帶他去鄉里 亭打 這叫共享資源申請 大侄子說那輛新自行車被他老爸騎走了,只有委曲坐那...