进程和线程的基础知识
-
目录
-
操作系统、进程、线程的包含关系
- 一个操作系统包含多个进程的容器,一个进程包含多个线程的容器。
-
什么是进程?
- 进程是程序(这里可以理解为我们写的代码)的真正运行实例,是分配资源的基本单位。
- 例子:我们手机上安装的王者荣耀游戏(这里没启动时就相当于一堆写好的代码),点击后的运行程序。
-
什么是线程?
- 线程是CPU的基本调度单位,每个线程执行的都是进程的某个代码段
-
进程和线程的关系和区别
-
关系
-
进程就是线程的容器,包含存储器资源等,而线程利用进程里的资源执行代码,最终产生结果。
-
例子:房子是一个容器(这里比作进程),房子有建筑面积、房间数量等(这里看做属性),房子里面有人(这里比作线程)。但是房子本身没有主动去做任何事情,人在房子里面工作、吃饭、睡觉(这些可以看成线程利用进程里的资源执行各种操作)。
-
-
相同点
- 生命周期(就绪、等待、运行等状态)。
-
区别
-
起源不同 :现有进程后有线程
-
概念不同: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统资源分配的基本单位,线程是CPU调度单位。
-
内存共享方式不同:
- 默认情况下内存无法与其他进程共享
- 线程可共享操作系统分配给其父进程的相同内存块
-
拥有资源不同:
- 进程拥有独立的内存,而线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、栈等),但它可以与同属一个进程的其他线程共享该进程所拥有的全部资源。
- 线程共享的内容:
- 进程的代码段 (重)
- 进程的公有数据 (重)
- 进程用户的ID与用户的ID (重)
- 进程打开的文件描述符
- 信号的处理器
- 进程当前的目录
- 线程独有的内容:
- 线程的ID
- 寄存器组的值
- 线程的堆栈
- 错误返回代码
- 线程的信号屏蔽码
-
数量不同: 一个程序至少一个线程,一个线程至少一个线程
-
开销不同:
- 线程的创建、终止时间比进程短
- 同一个进程内的线程切换时间比进程切换短
- 同一个进程内的各个线程间共享和文件资源,可以不通过内核通信。
-
-