为什么要使用协程
为什么要使用协程?,先来看段代码: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27using System.Collections;
using UnityEngine;
public class TestCoroutine : MonoBehaviour
{
void Start()
{
StartCoroutine(CoroutineFunc());
}
IEnumerator CoroutineFunc()
{
var wfeof = new WaitForEndOfFrame()
//1000次循环大概1s
for(int i = 0; i < 1000; i++)
{
//假设做大量的工作,大概CPU耗时:0.1s
DoManyWork();
yield return wfeof;
}
}
void DoManyWork()
{
Debug.Log("DoManyWork is called.");
}
}
上面的CoroutineFunc函数里面消耗了大量的CPU时间,在没有协程的开发环境中,比如像C/C++这样的开发语言,一般会创建一个线程来执行这种耗时的操作,多线程开发也会牵扯到各种数据和资源的互斥访问和线程同步的问题,这也导致在其他线程访问Unity引擎相关的组件会出现问题,因为我们没法控制其他的线程在访问操作一个对象时Unity引擎不去访问它,所以在Unity中其他线程一旦访问Unity引擎相关的组件就可能回出错。因此为让Unity的主线程不被这种耗时的操作给卡住,就只有将这种耗时的操作分到多帧里去执行,所以就出现了这种伪线程即协程。