多进程与多线程

1. 进程

第一印象

进程是程序的一个执行实例或者一个正在运行的程序,是OS分配资源的基本单位

Linux角度

进程是承担分配系统资源(CPU时间、内存)的实体,在内核当中使用struct task_struct结构对进程进行描述,也就是进程控制块(PCB)

PCB是什么?(其中较为重要的内容)
  • 标识符:描述本进程的唯一标识符,可以理解为ID
  • 状态:任务状态,比如“退出代码”、“退出信号”等
  • 优先级:相对于其他进程的优先级
  • 程序计数器:程序中即将被执行的下一条指令的地址
  • 内存指针:包括程序代码和进程相关程序的指针,还有和其他进程共享的内存块的指针
  • 上下文数据:进程执行时处理器的寄存器中的数据
  • 其他信息…

2. 多进程

Linux环境下,通过fork函数来创建一个子进程,则构成了多进程环境

创建原理

子进程会拷贝父进程的PCB页表等结构,创建子进程完成后,子进程具有自己的进程虚拟地址空间,具有自己的页表结构

3. 线程

通过上面的铺垫,可从以下三个角度来阐述线程

从进程角度:

  • 线程是一个进程内部的控制序列
  • 每个进程都至少有一个执行线程
  • 线程在进程内部运行,本质是在进程地址空间内运行

从资源分配角度:

  • Linux系统中,CPU眼中,所有线程PCB都要比传统的进程更加轻量化,也是CPU调度的基本单位
  • 透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流

从内核角度:

  • 在Linux系统中,线程被称之为轻量级进程,在内核中也是创建了struct task_struct结构体来描述线程,其中内存地址指向进程的虚拟地址空间
  • 线程之间独有:线程ID、栈空间、一组寄存器、ERRNO(错误号)和信号屏蔽字
  • 线程之间共享:文件描述符、文件的处理方式、当前进程工作目录、用户ID和组ID

4. 多线程

Linux环境下,使用pthread_create创建一个线程。其实在OS内核看来,就是创建了一个轻量级进程,同样线程的PCB也是拷贝进程(或者理解为主线程)的PCB

5. 优缺点

多进程优点
  • 由于各自进程都有自己的进程虚拟地址空间,所以各个程序之间的运行不会相互干扰,运行稳定
  • 子进程崩溃,不会影响父进程,反之同理
  • 多个进程可以充分利用多核CPU,并行运行,不用担心对程序结果造成二义性
多进程缺点
  • 由于进程的独立性,所以不同进程之间的数据交换需要用到进程间通信
  • 创建一个子进程的开销要比创建一个线程的开销大,并且子进程占用的资源要比线程更多
  • 子进程退出,需要父进程进行等待,否则会造成资源泄露
  • 多进程程序切换比多线程程序切换,操作系统耗费的代价更大
多线程优点
  • 创建一个线程的开销小
  • 多线程程序切换的过程中,操作系统耗费的代价更小
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值