一:区分进程、线程、程序
程序:
软件在
硬盘
上的表示,称为
程序
。
进程:当你运行一个
软件
时,系统会加载
程序
到内存中,形成一个
进程
;一个进程,有自己
独立
的内存区域;
多线程:
它是
软件和程序
的概念,它不是Unity的概念,
任何进程,都可以使用多线程
;Unity也可以使用多线程,但有一些限制;
二:线程和进程的区别
做个简单的比喻: 进程=火车, 线程=车厢。线程在进程下行进(单纯的车厢无法运行);
一个进程可以包含多个线程(一辆火车可以有多个车厢);
不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘);同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易);
进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源);
进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢);
进程可以拓展到多机,进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上);进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-"互斥锁" ;
进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”。
三:创建线程的目的
是为了建立
程序单独的执行路径,让多部分代码实现
同时执行。也就是说线程创建并执行需要给定线程要执行的任务。
四:同步和异步的概念
线程,进程,协程都是实现
异步
的一个方式;但它们之间也可以有
同步
的概念;
1)同步
例如上图所示,烧水、洗脚、做饭依次进行,时间花费15s。
同步
:任务之间
有序
,函数需要返回,才能继续执行的函数,称为同步函数。
2)异步
如上图所示,烧水、洗脚、做饭同时进行,时间花费6s。
异步
:
调用者,不需要等待被调用的函数返回,可以继续向下执行;异步,也意味着
无
序。【不能认为他们之间有顺序关系】
3)异步里面有同步
烧水和做饭是同时进行的,但是洗脚是在烧水完成后进行的,时间花费9s。
五:总结
1.进程和线程
进程 线程
每个
程序
,都会开一个
进程
一个进程,至少有一个
主线程
内存区域
执行内存区域代码
的
逻辑单元(干活的)
每个进程都以一个 主线程 来运行Main函数,作为 进程 的开始,主线程结束时,进程也就结束了;一个进程,可以使用多个线程 来分工或者一起完成任务;主线程外的线程,称为工作线程 ;
2.前台线程和后台线程
主线程是前台线程,当一个进程,至少有一个前台线程在运行时,那么进程不会被销毁;否则,进程会被系统销毁并回收;
我们可以任意设置一个线程为后台还是前台;
3.线程的状态
非激活但已创建
:线程对象已经分配,但没有被系统调试执行;
运行状态
:线程被系统调用运行;
线程是为了执行任务,任务就是一个函数,也称为子程序。