程序、进程与线程

本文详细介绍了程序、进程和线程的概念,强调了它们之间的联系与区别。程序是静态的指令集合,而进程是其动态执行实例,拥有独立的资源。线程是进程内的执行路径,共享进程资源,具有更低的开销和更快的切换速度。通过对比分析,阐述了多线程和多进程在并发执行中的差异。

程序

程序是存储在磁盘上, 包含可执行机器指令和数据的静态实体。 即进程或者任务是处于活动状态的计算机程序。

进程

进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例,即运行中的程序。

一个运行着的程序,可能有多个进程。进程在操作系统中执行特定的任务。

程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。

线程

概念

  • 线程就是程序的执行路线,即进程内部的控制序列,或者说是进程的子任务。
  • 线程,轻量级,不拥有自己独立的内存资源,共享进程的代码区、数据区、堆区(注意没有栈区)、环境变量和命令行参数、文件描述符、信号处理函数、当前目录、用户ID和组ID等资源。
  • 线程拥有自己独立的栈,因此也有自己独立的局部变量。
  • 一个进程可以同时拥有多个线程,即同时被系统调度的多条执行路线,但至少要有一个主线程。

特点

  • 线程是进程的一个实体,可作为系统独立调度和分派的基本单位。
  • 线程有不同的状态,系统提供了多种线程控制原语,如创建线程、销毁线程等等。
  • 线程不拥有自己的资源,只拥有从属于进程的全部资源,所有的资源分配都是面向进程的。
  • 一个进程中可以有多个线程并发地运行。它们可以执行相同的代码,也可以执行不同的代码。
  • 同一个进程的多个线程都在同一个地址空间内活动,因此相对于进程,线程的系统开销小,任务切换快。
  • 线程间的数据交换不需要依赖于类似IPC的特殊通信机制,简单而高效。
  • 每个线程拥有自己独立的线程ID、寄存器信息、函数栈、错误码和信号掩码。
  • 线程之间存在优先级的差异。

程序与进程的联系与区别

  • 进程是动态的,而程序是静态的。
  • 进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为1个独立单位得到操作系统的认可。
  • 1个程序可以对应多个进程,但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系。
  • 进程和程序的组成不同。从静态角度看,进程由程序、数据和进程控制块(PCB)三部分组成。而程序是一组有序的指令集合。

进程与线程的联系与区别

  • 线程是进程的最小执行和分配单元,不能独立运动,必须依赖于进程,这也就可以说众多的线程组成了进程。
  • 资源分配给进程,同一进程的所有线程共享该进程的所有资源。
  • 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
  • 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
  • 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。
  • 系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值