Unity初级(十三)

@[TOC]进程,线程与协程

九.进程,线程与协程

1.进程

程序的执行单元,是程序执行所需要所有资源的总和,一个进程就相当于是一个程序,一个程序可以起多个进程,解决了多任务并发的问题
PC端多用进程,移动端多用线程

2.线程

程序执行的最小单元,进程包含线程,进程创建的时候会自动创建一个进程,称为主线程
一个进程可以包含多个线程,线程之间也有层级关系,A线程开辟了B线程,当A线程结束的时候,B线程也结束了
理论上说,线程越多,程序执行的效率越高,但是如果无限开辟线程反而会使程序执行效率降低,因为开辟线程需要消耗资源,同时线程会去分掉CPU的时间片
线程之间可以资源共享,而进程不能,为了避免多个线程同时访问一个资源,使用了线程锁,保证了同时只有一个线程访问资源
线程对游戏引擎不友好,游戏中需要执行的任务几乎都需要用主程序来执行

3.协程

协程不是多线程,是运行在主线程中的一个程序
协程每帧执行一次,顺序是Update() -> coroutine -> LateUpdate()

// 动态返回一个枚举器接口的实现类
// 每调用一次yield return,将i加入到一个可枚举的序列里
public IEnumerator GetNumber()
{
for (int i = 0; i < 10; i++)
{
// 输出i
Console.WriteLine(i);
// 动态返回
yield return 0;
}
}

public IEnumerator GetNumber2()
{
for (int i = 0; i < 10; i++)
{
// 输出i
Console.WriteLine(i);
// 每3秒执行一次
yield return new WaitForSeconds(3);
}
}

// 协程的嵌套
public IEnumerator GetNumber3()
{
for (int i = 0; i < 10; i++)
{
// 输出i
Console.WriteLine(i);
// 等待下面的协程执行结束,继续执行
yield return StartCoroutine(GetNumber4());
// 是下面这种写法的简写
// Coroutine t = GetNumber4();
// yield return t;
}
}
public IEnumerator GetNumber4()
{
for (int i = 0; i < 10; i++)
{
// 输出i
Console.WriteLine(i);
yield return 0;
}
}

开启协程

// 用IEnumerator开启协程
StartCoroutine(IEnumerator enumerator);
// 使用方法名开启协程,返回值一定是IEnumerator
StartCoroutine(string MethodName);
StartCoroutine(stirng MethodName, object value);

停止协程

Coroutine t = StartCoroutine(“GetNumber2”);
StopCorountine(t);
// 停止全部的协程
StopAllCoroutine();
// 关键字跳出协程
yield break;

WWW类
数据下载的类,使用它在网络中下载资源,一定要放在协程里面做下载

void Start()
{
string path = “http://…想下载图片的url”;
StartCoroutine(Download(path));
}

private IEnumerator Download(string path)
{
WWW www = new WWW(path);

while(www.isDone == false)
{
    // 下载中,打印进度
    Debug.Log(www.progress);
    yield return 0;
}

// 跳出循环,说明下载完成

}

private IEnumerator Download2(string path)
{
WWW www = new WWW(path);
// 等待下载
yield return www;
// 下载完成
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值