题目:说一下进程和线程的区别
计算机基础--操作系统
解答
进程和线程的通俗理解
CPU
计算机CPU好比一个在运作的工厂【电力有限,一次只能供给一个车间使用】;
进程
进程好比工厂里的车间,它代表CPU能处理的单个任务;
- 任一时刻,CPU总是运行一个进程,其它进程处于非运行状态
线程
线程好比车间里的工人,一个进程可以包含多个线程;
车间的空间是工人共享的
- 一个进程的内存空间是共享的,每个线程都可以使用这些共享内存
互斥锁Mutex
有的房间最多只能容纳一个人,比如厕所
- 一个线程使用某些内存空间时,其它线程必须等它结束才能使用这块内存
一个防止他人进入的简单方法就是门口加一把锁。先到的人锁上门,后到的人看到门锁了就在门口排队,等锁打开了再进去
- 互斥锁:
防止多个线程同时读写某一块内存区域
信号量Semaphore
有些房间可以同时容纳n个人,比如厨房
- 好比某些内存区域,只能供给固定数目的线程使用
门口挂n把锁。进去的人取一把钥匙,出来时再把钥匙挂回原处。后到的人看到钥匙空了就在门口排队
- 信号量:
用来保证多个线程不会互相冲突
mutex是semaphore的一种特殊情况(n = 1),可否用后者替换前者?
- mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计
操作系统设计的总结
- 以多进程形式,允许多个任务同时运行
- 以多进程形式,允许单个任务拆分成不同的部分运行
- 提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源
概念
进程Process
- 指系统中正在运行的一个应用程序;程序一旦运行就是进程;是系统进行资源分配的最小单位
进程 = 线程 + 内存 + 文件/网络句柄
-
内存:逻辑内存,指的是内存的寻址空间。
每个进程的内存是相互独立的
。 -
文件/网络句柄:
是所有进程共有的
。例如打开同一个文件,去抢同一个网络的端口的操作是被允许的
线程thread
- 系统分配处理器时间资源的基本单位,或者说进程内独立执行的一个单元执行流;
是程序执行的最小单位
线程 = 栈 + PC + TLS
- 栈:调用堆栈即调用栈(堆是没有含义的),从主线程的入口main函数,会不断地进行函数调用,每次调用时会把所有的参数和返回地址都压入栈中
-
PC(Program Counter)程序计数器:操作系统真正运行的是一个个线程,而
进程只是它的一个容器
。PC就是指向当前的指令
,指令存放在内存中;数据和程序是存储在同一片内存的,PC指针指向内存
。 -
TLS(thread local storage):用来存储线程所独有的数据。
线程才是操作系统真正运行的
。
进程之间是怎样进行交互的?
- 通过
TCP/IP
的端口来实现
线程之间又是怎样进行交互的?
- 通过
共享的内存
,只要大家的指针是同一个就可以看到各自的内存
总结
- 进程需要分配一大部分的内存,而线程只需要分配一部分栈。
- 一个程序至少有一个进程,一个进程至少有一个线程。
- 进程是资源分配的最小单位,线程是程序执行的最小单位。
- 一个线程可以创建和销毁另一个线程,同一个进程中的多个线程之间可以并发执行。