进程和线程的区别


什么是进程

进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

进程的概念主要有两点:

  • 第一,进程是一个实体。每一个进程都有它自己的地址空间,如下图:

在这里插入图片描述

  • 第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。
    (由程序到进程:内核将程序读入内存,为程序镜像分配内存空间 -> 内核为该进程分配进程标志符PID -> 内核为该进程保存PID及相应的进程状态信息。)
    在这里插入图片描述

什么是线程

线程是比进程更小的能独立运行的基本单位,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

一个线程中有:

  1. 指向当前被执行指令的指令指针
  2. 寄存器值的集合,定义了一部分描述正在执行线程的处理器状态的值
  3. 私有的数据区

如下图,图左是进程的内存图,图右显示了是进程内部的线程。

在这里插入图片描述

线程基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如线程ID,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。故而相比较进程之间的操作而言,它有两个优点。一是更加轻量级,二是线程间通信更加方便。

进程和线程的区别

区别点具体
从属关系进程中包含了线程,而线程中不能包含进程
开销不同进程的创建、销毁和切换开销都远大于线程
拥有资源进程是操作系统分配资源的基本单位,线程时处理器调度的基本单位
共享资源多个进程之间不能共享资源,而线程可以共享资源文件
通信进程间的通信需要使用管道/共享内存等来进行通信,线程之间可以直接读写进程数据段来进行通信
控制和影响力子进程无法影响父进程,而子线程可以影响父线程,如果主线程发生异常会影响其所在进程和子线程
上下文切换速度进程上下文切换速度很慢,线程的上下文切换速度快
操纵者不同进程的操纵者是操作系统,线程的操纵者是编程人员

以上的表格中的部分还需要一些解释如下:

  1. 特殊进程之间的共享——父子进程
    通过fork创建得到的父子进程之间会共享虚拟内存空间(实际的物理存储空间地址不同),故而其会有部分内容可以共享,详见博文:linux系统编程:分叉函数fork && 父子进程

  2. 上下文切换
    我们通常说的上下文又叫CPU上下文,是CPU运行任何任务前,必须依赖的环境,包括CPU 寄存器程序计数器。CPU上下文切换,是保证Linux系统正常工作的核心功能之一,但过多的上下文切换,会把CPU时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,从而缩短进程真正运行的时间,导致系统的整体性能大幅下降。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值