unity使用多线程或异步Demo

最近在做和数据库有关的程序,但是在更新数据时造成卡顿,有没有大佬有过这方面的经验的,可以详谈

不只Unity,大多数游戏引擎都是单线程的,因为大多数引擎都是主循环结构,逻辑更新和画面更新的时间点要求有确定性,如果在逻辑更新和画面更新中引入多线程,就需要做同步而这加大了游戏性程序员(编程关卡的程序员)的开发难度。所以需要异步功能的时候,游戏引擎总是倾向于使用time slicing的策略而不是使用多线程,Unity中的协程(coroutine)yield语法本质就是time slicing。但是多线程也是有好处的,如果不是画面更新,也不是常规的逻辑更新(指包括AI、物理碰撞、角色控制这些),而是一些其他后台任务,比如网络传输,则可以将这个独立出来做成一个工作线程,这需要写Unity游戏的Native扩展。追问

谢谢,就是我现在是只需要更新数据,获取到新的和旧的数据比较,我试了一下,获取数据时造成了堵塞,所以才考虑用多线程或者异步,你有好的方法么老哥

温馨提示:内容为网友见解,仅供参考
无其他回答

Unity实践—多线程任务队列实现
通过TaskScheduler的配置与使用,实现了Task的高效管理与调度。实现的多线程任务队列工具包含了多种执行方式,包括同步与异步执行,以及针对主线程的特别优化。工具类TaskQueue提供了构造方法与执行方法,用户可以通过这些方法启动任务并获取执行结果。此外,工具还支持延迟执行的功能,并且提供独立的主线程执行系统...

unity 为什么避免使用 多线程
不只Unity,大多数游戏引擎都是单线程的,因为大多数引擎都是主循环结构,逻辑更新和画面更新的时间点要求有确定性,如果在逻辑更新和画面更新中引入多线程,就需要做同步而这加大了游戏性程序员(编程关卡的程序员)的开发难度。所以需要异步功能的时候,游戏引擎总是倾向于使用time slicing的策略而不是使...

unity 有多线程debug
多线程有4种状态:Start()开始;Abort()终止;Join()阻塞;Sleep()休眠;有5种优先级:从高到底依次为:Highest,AboveNormal ,Normal ,BelowNormal ,Lowest;线程的默认优先级为Normal;

基于Unity的游戏框架设计(5)- 模块化、多实例、多线程 (上)_百度知...
在Unity游戏框架设计中,多实例和多线程是关键特性,它们分别解决不同场景下的需求。首先,框架的多实例设计允许在需要隔离运行环境时,避免单例模式的局限。通过创建多个“框架实例”,可以灵活管理和维护大量对象,如对象池和事件系统,同时降低遗漏实例化的风险。多线程与协程的选择主要基于现代CPU的多核心...

unity线程和协程的区别
首先,线程是在独立的执行路径上运行,与主线程异步进行,适合处理耗时的计算或I\/O操作,但无法直接访问Unity的API和资源,且多线程编程需要注意线程安全问题。而协程则运行于主线程中,与Unity的更新循环同步,可以方便地访问Unity的API和资源,且避免了多线程编程中的线程安全问题。其次,线程需要使用多...

基于Unity的游戏框架设计(5)- 模块化、多实例、多线程 (上)_百度知...
在Unity游戏框架设计中,实现多实例和多线程处理是关键环节。首先,框架需要支持多实例,以应对复杂场景中的隔离需求。一个框架实例可能需要管理大量对象和管理器,比如对象池和事件系统,单例模式在这种情况下显得局限。通过框架实例化,可以确保隔离的运行环境,避免遗漏实例化对象的问题。多线程和协程的选择...

Unity多线程渲染概述
这种流程确保了多线程渲染的高效执行。多线程策略在主线程频繁向渲染线程提交渲染命令时尤为重要。为优化效率,避免锁消耗,虚幻和Unity均采用了无锁策略。UE4通过LockFreeList实现无锁队列,借助CAS(Compare And Swap)技术。Unity则使用循环队列(RingBuffer),通过原子操作的Head和Tail指针实现。这两种策略...

Unity性能优化-GamePlay部分
然而,部分逻辑如物理查询和玩家交互不能完全多线程,为此,我们弃用了Unity的Physicx,转而采用线程安全的Bullet物理引擎。尽管初期切换工具可能较大,但Bullet接口与Physicx相似,无缝集成。对于涉及玩家数据的逻辑,需在主线程处理,明确哪些在actor中执行,哪些在单独服务中处理。优化流程是:主线程->异步job...

unity3d是否支持写成多线程程序?如果支持的话需要注意什么
仅能从主线程中访问Unity3D的组件,对象和Unity3D系统调用 支持:如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine。注意:C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象

为什么说Unity不支持多线程
Unity引擎的类都不是线程安全的(Mathf不是类);Unity没有自带的多线程解决方案,协程是假的多线程,本质还是单线程;Unity目前只支持C#3.0,所以用不了高级的C#特征,比如线程池等;

相似回答