首先一个重要的观点:
进程是系统分配资源的最小单位,线程是系统调度的最小单位。
进程:
进程是操作系统对⼀个正在运行的程序的⼀种抽象,换言之,可以把进程看做程序的⼀次运行过程; 同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
进程在创建的时候系统就会给它分配内存,硬盘,网络资源等,同时一台计算机上可以同时有多个进程,它们是互不干扰的,我们将这样的特性叫做“隔离性”;但目前的应用,往往要完成一个复杂的业务需求,因此就要多个进程一起完成,那么就有了进程间的“信息交换”目前,主流操作系统提供的进程通信机制有如下: 1. 管道 2. 共享内存 3. 文件 4. 网络 5. 信号量 6.信号
线程:
一个线程就是⼀个"执行流".每个线程之间都可以按照顺序执行自己的代码.多个线程之间"同时"执行着多份代码,线程是包含在进程里的。线程的出现就是为了提高效率;
为什么要有线程:
最主要的就是目前“并发编程”成为“刚需”
单核CPU的发展到达了瓶颈,因此就需要发展多核CPU,多核CPU往往又需要并发编程才能发挥出它的实力;
而且很多程序运行时并不是每时每刻都在占用资源的,也会有空闲的间隔,这些间隔要被充分利用起来就需要并发编程;
那么就会有人好奇,多进程也可以实现并发编程呀,为什么要搞多线程呢?
那就是因为线程比进程更加轻量化:
1.创建线程比创建进程快
2.销毁线程比销毁进程快
3.调度线程比调度进程快
总得来说就是因为多线程效率更高,举个栗子:
把进程看作一个工厂,线程看成打工人,现在要加工1000吨石材,如果一个工厂里面只有一个工人是不是很慢,那么我们要开多一个工厂吗,可以但是没必要,耗费太大,我们为什么不多雇点工人呢?因此一个工厂里面有多点工人就会提高效率了
线程与进程的区别:
进程是包含线程的,每个进程至少一个线程,即“主线程”;
进程和进程之间不共享内存空间,同一个进程的线程之间共享内存空间;
进程是系统分配资源的最小单位,线程是系统调度的最小单位。
⼀个进程挂了⼀般不会影响到其他进程.但是⼀个线程挂了,可能把同进程内的其他线程⼀起带走(整 个进程崩溃)