进程和线程的区别,以及应用场景

2019-07-14 11:27发布

什么是线程?

Linux下线程用进程PCB模拟描述,也叫轻量级进程 线程是进程内部的一个执行流,也就是线程在进程的地址空间内运行。 一个进程内的所有线程共享进程资源 线程是CPU调度的基本单位(CPU调度是按照PCB进行调度的) 创建,销毁一个线程相较创建,销毁一个进程成本要低(创建进程要创建PCB,虚拟地址空间,创建页表,维护映射,把硬盘的代码数据加载到内存,文件描述符等等,而创建线程只需要一个PCB指向进程的虚拟地址空间即可,同样销毁一个线程只需要销毁PCB即可) 线程间的切换相比于进程间的切换容易的多(进程间的切换,PCB切换,页表切换等等,线程切换PCB切换,页表不切换)

什么是进程?

进程是拥有一个执行流,或多个执行流的线程组。 进程是一个能独立运行的基本单位,同时也是系统分配资源基本单位。(独立性) 进程是动态执行的程序(创建一个进程要创建PCB描述进程,为进程分配资源,进程可以被调度,被执行。而程序就只是静静躺在硬盘上)(动态性) 任何进程都可以同其他进程一起并发执行(并发性)(并发:一个CPU多个进程,分时切换) 进程间的相互制约,进程具有执行的间断性,进程按照各自独立不可预知的速度向前推进(异步性)(异步性:指进程以不可预知的速度向前推进,内存中的每个进程何时执行,何时暂停,以怎样的速度向前推进,要用多长时间完成等都是不可预知的)

进程和程序的区别?

程序是指令的有序集合(静静的躺在硬盘上,静态的),而进程是动态执行的程序(把程序加载到内存中,用PCB描述,被调度,被执行,有生命周期)--------------程序静态的,进程动态的 程序可以作为一种软件资料长期保存,而进程是有生命周期的。------------程序:可以一直被保存,无生命周期,进程是有生命周期的

进程和线程的区别?

线程是被CPU调度的基本单位,进程是能独立运行的基本单位,是系统分配资源的基本单位 创建销毁线程要比创建销毁进程成本低的多。(创建进程要,创建PCB,开辟虚拟地址空间,创建页表,维护映射关系,加载硬盘数据到内存,创建文件描述符,等等,而创建线程只要创建一个PCB指向进程的虚拟地址空间即可) 进程拥有自己独立的虚拟地址空间,而一个进程中的多个线程共享进程的虚拟地址空间 线程占用的资源要比进程少 线程缺乏访问控制,进程中的一个线程出错,会终止掉整个进程,从而导致其他线程也凉凉,而一个进程出错,不会影响另一个进程

线程和进程共享资源,但是有一部分数据是自己私有的?

线程和进程共享:

同一地址空间      (堆,代码段,数据段,环境变量,页表) 文件描述符表 每种信号的处理方式 当前工作目录 用户id和组id

线程和进程私有:

私有栈结构(保存临时数据,保证线程执行时不相互影响) 上下文数据(CPU调度切换数据保存) 调度优先级 errno 信号屏蔽字

线程优缺点,以及应用场景

线程优点:

线程共享进程的地址空间,因此线程间通信比较容易(但是不安全要注意维护),而进程间通信就相比较困难了,因为两个进程看到同一块资源不容易 ------------节约资源,成本低,调度切换快 创建销毁成本低 线程间切换容易 等待慢速I/O的同时,可以干其他事情

进程优点:

更强的容错性,安全,一个进程挂了,不影响其他. 多进程比多线程编写,调试容易。

线程应用场景:

等待慢速I/O时,交给一个线程等待,接着做其他事情 通信,比较容易(注意加锁)

进程的应用场景:

需要安全稳定时用进程,需要速度时用进程,既要速度又要安全。有的书上说,能用多进程解决的尽量不要用多线程