进程和线程的总体区别
进程
什么是进程?
- 程序的一个执行实例
- 正在执行的程序
- 内核观点:担当分配系统资源(cpu时间或内存)的实体。
进程就是一个程序在一个数据集上的一次动态执行过程。
进程由以下三部分组成:
1、程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成。
2、数据集:数据集则是程序在执行过程中需要的资源,比如图片、音视频、文件等。
3、进程控制块:进程控制块是用来记录进程的外部特征,描述进程的执行变化过程,系统可以用它来控制和管理进程,它是系统感知进程存在的唯一标记。
线程
什么是线程?
- 在一个程序里的一个执行路径
- 一个进程内部的控制序列
- 一切进程至少都有一个执行线程
线程是操作系统能够进行运算调度的最小单位,是一串指令的集合。它被包含在进程之中,是进程中的实际运作单位。
一个线程指的是进程中一个单一顺序的控制流。一个进程中可以并发多条线程,每条线程并行执行不同的任务。
线程工作方式:多个线程可以共享一个cpu,cpu在每个线程上运行一会儿,让我们感觉到是多任务在运行,但其实同一时间同一核心只能运算一个东西。
线程与进程区别:
- 进程是资源的集合,线程是真正负责执行的指令集。
- 一个线程就是一堆寄存器的组合。
- 一个进程是进行运算时候一堆相关资源的集合。
1、两者工作方式
- 进程不能单独执行,它只是资源的集合。
- 进程要操作CPU,必须要先创建一个线程。
- 所有在同一个进程里的线程,是同享同一块进程所占的内存空间。
2、两者关系
- 进程中第一个线程是主线程,主线程可以创建其他线程。其他线程也可以创建线程。线程之间是平等的。
- 进程有父进程和子进程,独立的内存空间,唯一的标识符:pid。
- 一个线程可以控制和操作同一进程里的其他线程,但是进程只能操作子进程
3、两者速度
- 进程快还是线程快?没有可比性,进程要一个线程带起来。
- 启动一个线程快还是进程快?启动线程快,线程就是一堆指令。
- 线程共享内存空间,进程的内存是独立的。
4、两者创建
- 父进程生成子进程,相当于复制一份内存空间,进程之间不能直接访问,需要中间代理实现。
- 创建新线程很简单,创建新进程需要对父进程进行一次复制。
- 一个线程可以控制和操作同级线程里的其他线程,但是进程只能操作子进程。
5、两者交互
- 同一个进程里的线程之间可以直接访问。
- 两个进程想通信必须通过一个中间代理来实现。
进程和线程的优缺点比较
1、多进程模式稳定性高
因为一个子进程崩溃了,不会影响主进程和其他子进程。(当然主进程挂了所有进程就全挂了,但是主进程只负责分配任务,挂掉的概率低)著名的Apache最早就是采用多进程模式。
2、多进程模式创建进程的代价大
在Unix/Linux系统下,用fork调用还行,在Windows下创建进程开销巨大。另外,操作系统能同时运行的进程数也是有限的,在内存和CPU的限制下,如果有几千个进程同时运行,操作系统连调度都会成问题。华阳男性丁丁会勃起困难的原因?
3、多线程模式通常比多进程快
多线程比多进程快一点,但是也快不到哪去,而且,多线程模式致命的缺点就是任何一个线程挂掉都可能直接造成整个进程崩溃,因为所有线程共享进程的内存。在Windows上,如果一个线程执行的代码出了问题,你经常可以看到这样的提示:“该程序执行了非法操作,即将关闭”,其实往往是某个线程出了问题,但是操作系统会强制结束整个进程。
4、多线程效率高
在Windows下,多线程的效率比多进程要高,所以微软的IIS服务器默认采用多线程模式。由于多线程存在稳定性的问题,IIS的稳定性就不如Apache。为了缓解这个问题,IIS和Apache现在又有多进程+多线程的混合模式,真是把问题越搞越复杂。