Unity中的多线程

本文探讨了Unity引擎中如何进行多线程操作,包括如何切换到主线程和渲染线程,这对于优化游戏性能和避免同步问题至关重要。

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

Unity中的多线程

多线程测试

  • 切换后台再返回,主线程和渲染线程ID均不变
  • 切换后台再返回,音频线程ID会改变

多线程任务

unity中使用Job

  • 效率最高,unity 专门开辟了一个线程池来执行 Job,用这个执行多线程任务效率最高
    • 首先直接用线程池中的线程,省掉线程分配和释放
    • 其次会根据cpu数量分配合适的线程数量,避免恶性竞争cpu,产生过多的上下文切换
  • 参考 unity中使用job

unity中使用Task

参考 异步函数

unity中使用Parallel

    Parallel.ForEach(_materials, material =>{
   
        //  做点什么
    });

使用Thread创建多线程

没有上面2种方案好用

线程切换

切换到主线程

  1. (推荐)使用unity内置的 UnitySynchronizationContext

        //  最简单的用法
        public TestMultiThreadCallback()
        {
         
            SynchronizationContext context = SynchronizationContext.Current;
            CallbackFromMultiThread(()=>{
         
                context.Post(()=>{
         
                    //  回到主线程
                });
            });
        }
    
        //  封装成工具类
        public static class ThreadUtil
        {
         
            //  让代码在unity主线程运行
            //  使用 UnitySynchronizationContext.Send 如果当前是主线程则直接运行,
            //      否则加入队列,阻塞当前线程,等待任务完成,谨慎使用,容易造成死锁
            //      比如 android 的java端在 UnityActivity.onResume 时调用c#代码,
            //      然后c#调用 Send 往主线程加任务就会死锁,因为 java 线程被阻塞等待 c# 任务完成 
            //      而unity等待java线程调用 onResume 才能让unity线程继续执行
            //  使用 UnitySynchronizationContext.Post 直接加入队列,当前线程继续执行
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值