面试中常被问到(12)进程与线程的区别
Posted AllenSquirrel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试中常被问到(12)进程与线程的区别相关的知识,希望对你有一定的参考价值。
-
概念:
进程:进程是对运行时程序的封装,是操作系统进行资源分配基本单位。对于操作系统而言,进程就是程序运行时的描述,通过这个描述,操作系统就可以进行程序调度运行管理
线程:线程是CPU可识别和执行的最小单位,是操作系统进行运行调度基本单位,每个线程有各自任务但共享同一地址空间,在linux操作系统下,线程也是通过pcb描述的,一个进程有多个执行流pcb,也就是说一个进程由一个或多个线程组成,而线程仅仅是其中的一条执行流,这些pcb共享进程中的资源,但相比较于线程较为轻量,也称为轻量级进程
-
区别:
- 一个进程最少有一个线程,也可以有多个线程,但一个线程只属于一个进程
- 进程是操作系统进行资源分配的基本单元,而线程是操作系统进行运行调度的基本单元,是CPU可识别和执行的最小单元
- 进程之间相互独立,各自有各自的地址空间,但线程都是多个共享同一地址空间(堆,代码段,常量区),每个线程有各自栈空间
- 进程创建,销毁,切换的系统开销远大于线程。这是由于进程在进行创建和销毁时需要操作系统给分配或回收地址开间及资源,在进程切换时候,操作系统需要对整个CPU环境进行保存同时对新环境的设置,而线程只需要保存部分寄存器即可
- 一个进程挂掉,一般不会影响其他进程的正常运行,但如果一个线程挂掉,会导致该线程所在的整个进程挂掉
- 通信方式:
- 进程通信方式:
(1)管道通信:匿名管道(PIPE,无标识符,只能用于亲缘关系之间通信,eg:父子进程)命名管道(FIFO,标识符就是创建的管道文件,通过打开同一个管道文件访问同一个缓冲区)
(2)共享内存(开辟一块内存空间,每个进程将物理内存空间映射到各自虚拟地址空间上,通过虚拟地址访问,实现数据访问共享)
(3)消息队列(优先级队列,多个进程通过对队列进行添加或获取节点来实现数据通信)信号量(pv计数对资源计数判断获取合理性)
(4)socket套接字通信
- 线程通信方式:
(1)临界区
(2)互斥量(保证不会被多个线程访问)
(3)信号量(会被多个线程访问)
(4)事件触发(通知操作,提供线程优先级比较)
以上是关于面试中常被问到(12)进程与线程的区别的主要内容,如果未能解决你的问题,请参考以下文章