进程、线程、携程摘抄自 码上就搞定
同步,异步加载摘抄自 京城下了一场大雪
进行、线程、携程
总览
进程
进程组成定义
一般由程序、数据集合和进程控制块三部分组成。
- 程序用于描述进程要完成的功能,是控制进程执行的指令集;
- 数据集合是程序在执行时所需要的数据和工作区;
- 程序控制块(Program Control Block,简称PCB),包含进程的描述信息和控制信息,是进程存在的唯一标志。
进程特性:
-
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
-
并发性:任何进程都可以同其他进程一起并发执行;
-
独立性:进程是系统进行资源分配和调度的一个独立单位;
-
结构性:进程由程序、数据和进程控制块三部分组成
作者:码上搞定
来源:简书
线程
线程背景
- 在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单位。
- 一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。
进程线程 构成区别
- 一个标准的线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。
- 而进程由内存空间(代码、数据、进程空间、打开的文件)和一个或多个线程组成。
进程和线程 区别
- 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
- 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
- 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
- 调度和切换:线程上下文切换比进程上下文切换要快得多。
携程
携程与线程
- 线程的切换由操作系统负责调度,协程由用户自己进行调度,因此减少了上下文切换,提高了效率。
- 线程的默认Stack大小是1M,而协程更轻量,接近1K。因此可以在相同的内存中开启更多的协程。
- 由于在同一个线程上,因此可以避免竞争关系而使用锁。
- 适用于被阻塞的,且需要大量并发的场景。但不适用于大量计算的多线程,遇到此种情况,更好实用线程去解决。
携程 线程区别
同步加载,异步加载、懒加载、预加载
unity异步加载
- 异步加载新游戏场景,当新场景加载完成后进?入新场景并且销毁之前的场景。
Application.LoadLevelAsync (“XXX”); - 同样异步加载新场景,新场景加载完毕后,保留之前场景的游戏对象,并且进入新场景。
Application.LoadLevelAdditiveAsync ("XXX ");
unity同步加载
- 读取新关卡后立即切换,其参数为所读取新关卡的名称或索引。
Application.LoadLevel ("XXX "); - 加载一个新的场景,当前场景不会被销毁。
Application.LoadLevelAdditive ("XXX ");
XXX可以是场景名,也可以是加载场景的序号
相关懒加载和预加载可参考:书虫和泰迪 方便理解记忆。
- 总结:
同步加载:在主线程中进行加载
异步加载:单独开辟一个加载的线程用来加载资源,不影响主线程的进行
协程可以代替线程,但协程不是多线程,只是在模拟多线程。
unity提前加载场景避免场景卡顿:协程异步加载场景