协程的划分是基于程序所写的yield划分的,划分粒度比线程大,所以不容易出现冲突现象,但是如果协程阻塞会导致线程阻塞。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CoroutineTimer : MonoBehaviour
{
private int FrameNum = 500;
private bool IsReady = false;
// Start is called before the first frame update
void Start()
{
//Debug.Log(Time.realtimeSinceStartup);
StartCoroutine("Timer");
}
private int count = 1;
// Update is called once per frame
void Update()
{
if (IsReady)
{
Debug.Log(Time.realtimeSinceStartup + ": 主线程Update运行中... Update运行第" + count + "次");
Debug.Log(Time.realtimeSinceStartup + "IsReady置为false");
IsReady = false;
count++;
}
}
public IEnumerator Timer()
{
for(int i = 1; i <= FrameNum; i++)
{
Debug.Log(Time.realtimeSinceStartup + ": 协程运行中... 协程运行第" + i + "次");
Debug.Log(Time.realtimeSinceStartup + "IsReady置为true");
IsReady = true;
yield return new WaitForEndOfFrame();
}
//Debug.Log(Time.realtimeSinceStartup);
}
}
结果如下: