1.概念
进程(process):运行起来的程序就叫做进程.
比如一个.exe可执行文件,如果没运行,那就是静态文件:如果运行起来,那就是进程.
线程(thread):可以理解为"轻量级"进程.
为何作此理解?往下看你就知道咯~~
先附上一张图:
2.区别
敲黑板!!!面试题高频考点
1.从属关系上:进程包含线程,一个进程至少包含一个线程.(主线程)
2.根本区别上:进程是操作系统进行资源分配的基本单位;线程是操作系统进行任务调度执行的基本单位.
3.资源分配上:每个进程拥有独立的内存空间(内存资源)和文件描述符表(硬件资源);在同一个进程里的多个线程会共用本进程里的内存空间和文件描述符表.
4.影响关系上:进程具有隔离性,不同进程之间不会产生影响.但在同一个进程里的多个线程由于共用同一个内存空间和文件描述特表, 一旦其中一个线程崩溃,就可能会导致本进程里的其他线程随之崩溃,进而导致整个进程崩溃.
5.资源开销上:创建/销毁/调度进程所消耗的资源都大于创建/销毁/调度线程.因此线程也被称作轻量级进程.
比如说,在创建进程的时候(也就是在创建第一个线程),操作系统会为其分配内存和硬件资源,但创建后续线程的时候,操作系统不再为其分配内存和硬件资源.
6.执行逻辑上:每个线程都是一个独立的执行流,在同一个进程里的多个线程是并发执行的(这里统称为并发,具体是并发还是并行,得看操作系统自身).
但是,线程是以进程为载体,不存在脱离于进程而单独存在的线程.
3.some supplement
操作系统真正进行调度的单位是线程.
可能是多个线程在同一个cpu核心上,通过线程调度,先后执行. --并发
也有可能是多个线程在多个cpu核心上,同时执行. --并行
前面之所以说”调度进程”,其实是因为之前提到的进程里只有一个线程,所以说,当存在多个线程的时候,那就不能说成是调度进程了.
一般而言,并发和并行同时存在.
这里提一嘴:
同一个程序,内部想要并发的完成多组任务,此时使用多线程比较合适。(比如 虎牙直播,这是一个程序,同时的 录制画面,录制声音,网络传输....) 可以更高效,节省资源.
多个程序之间,此时就是多个进程了~~(比如虎牙直播是一个进程,画图板是另一个进程....) 可以保证彼此间不受影响(隔离性).
通俗来说,线程如果理解为工厂,那么线程就是工厂里的流水线.
通常来说,每执行一个程序,就是对应一个进程.
但也不绝对,比如Chrome(谷歌浏览器),这个程序执行起来会有多个进程.
注意:数量合适的情况下,同一个进程里,线程越多,程序的执行效率越高.但是一个进程是具有最大并发程度的.
此时如果再多加线程,可能导致程序执行效率降低.毕竟线程的调度也是会消耗资源的.
由于cpu核心数是一定的(资源是有限的),此时再多开线程或进程可能都无济于事其至会拖慢执行效率,有啥办法呢?再弄个cpu呗(再搞个主机)!!
也就是我们常说的--->分布式开发
uu们加油!!!