C#知识点讲解之进程,线程,Unity协程的爱恨情仇

本文深入解析进程、线程和协程的概念与区别,包括它们的执行效率、开销、应用场景及Unity中的使用技巧。重点阐述了协程在游戏开发中的优势与限制,以及如何在Unity中正确使用协程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前方干货预警,非战斗人员请尽快撤离!

进程process,线程thread,协程coroutine

一、一句话总结:
一般一个应用程序一个进程。一个进程有一个主线程和多个辅助线程,你可以在线程上开启多个协程。

进程有自己独立的栈和堆
线程有自己独立的栈和共享堆
协程有自己独立的栈和共享堆

二、协程和线程的区别:
在执行效率上:就比如说线程ta和线程tb,执行完成各需要10s
1、在单核os中,用的是伪并行,a走一下,挂起,b走一下。中间切换时间0.1s。
那么单核中ta和tb执行完需要10+10+19*0.1=21.9s
而协程就是10+10=20s
2、在多核os中,线程真并行,只要10s
而协程仍然需要10+10=20s
总结:在多核os中,同一时间可以执行多个线程,但同一时间只能执行一个协程。cpu对协程的请求也是一个一个来的。

其他方面:
1、开启一个线程的开销比一个协程大,线程是os级别的概念,协程是编辑器级别的,实现由程序员自己实现
2、线程用于多个关联性不强的工作,而协程主要用于将一个工作分时间片处理。
3、协程执行代码,在yiled之前的跟其他方法没有区别。之后的挂起等待。生命周期大部分都在update和lateupdate之间(个别除外),也就是挂起时每帧都会去看下有没有满足yiled后的条件。
4、Unity中,除主线程外,其他线程无权访问Unity3D的组件、对象和Unity3D系统调用,如果要使用的化, 需要把组件中的数值传到开启的新线程中。

三、Unity是单线程的,避免多线程引发bug不好查找,但Unity是可以支持多线程的,如果同时要处理很多事情或者与Unity对象互动小的可以用thread,否则用coroutine。
2020.8.29更新补充内容:
/*
unity多线程中,只有主线程才有权访问unity的相关游戏对象,API等内容,其他线程要想使用,需要从主线程中传入值。因为unity多线程技术一般只用在资源下载,网络通信方面。
*/

C#中的lock关键字
,可用于确保只有一个线程可以在特定事件内访问特定的对象。

下附协程常使用的内容:

yield return null; 下一帧再执行后续代码
yield return 0; 下一帧再执行后续代码
yield return 6;(任意数字) 下一帧再执行后续代码
yield break; 直接结束该协程的后续操作
yield return asyncOperation;等异步操作结束后再执行后续代码
yield return StartCoroution(/*某个协程*/);等待某个协程执行完毕后再执行后续代码
yield return WWW();等待WWW操作完成后再执行后续代码
yield return new WaitForEndOfFrame();等待帧结束,等待直到所有的摄像机和GUI被渲染完成后,在该帧显示在屏幕之前执行
yield return new WaitForSeconds(0.3f);等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的时间会受到Time.timeScale的影响);
yield return new WaitForSecondsRealtime(0.3f);等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的时间不受到Time.timeScale的影响);
yield return WaitForFixedUpdate();等待下一次FixedUpdate开始时再执行后续代码
yield return new WaitUntil()将协同执行直到 当输入的参数(或者委托)为true的时候....:yield return new WaitUntil(() => frame >= 10);
yield return new WaitWhile()将协同执行直到 当输入的参数(或者委托)为false的时候....:yield return new WaitWhile(() => frame < 10);
yield return X>5;等待变量x大于5时再执行后续代码
yield return transform.position.y<0;等待物体的高度小于0时再执行后续代码
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值