C++ 并发编程 | 进程与线程

本文详细介绍了进程与线程的基本概念、通信方式,包括进程间的低级和高级通信,以及线程间的同步方法如锁机制和信号量。还对比了进程和线程在内存分配、切换开销和包含关系上的差异。
摘要由CSDN通过智能技术生成

一、进程与线程

1、进程

1.1、定义

操作系统中最核心的概念就是进程,进程是对正在运行中的程序的一个抽象,是系统进行资源分配和调度的基本单位。进程是一种抽象的概念,一般由程序、数据集合和进程控制块三部分组成,如下:

  • 程序用于描述进程要完成的功能,是控制进程执行的指令集
  • 数据集合是程序在执行时所需要的数据和工作区
  • 程序控制块,包含进程的描述信息和控制信息,是进程存在的唯一标志

1.2、进程间通信方式

据进程通信时信息量大小的不同,可以将进程通信划分为两大类型,如下:

  • 低级通信: 控制信息的通信(主要用于进程之间的同步,互斥等控制信息的传递)
  • 高级通信: 大批数据信息的通信(主要用于进程间数据块数据的交换和共享,常见的高级通信有管道,消息队列,共享内存等)

进程间的通信方式,有下面几种:

  • 管道通信:管道通常指无名管道,是一种半双工的通信方式,数据只能单向流动。当一个管道建立时,它会创建两个文件描述符:fd[0]为读而打开,fd[1]为写而打开
  • 消息队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列,存放在内核中并由消息队列标识符(即队列ID)标识
  • 共享内存:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问
  • 信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问

2、线程

2.1、定义

线程(thread)是操作系统能够进行运算调度的最小单位,其是进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,这些线程共享同一块内存,线程之间可以共享对象、资源,如果有冲突或需要协同,还可以随时沟通以解决冲突或保持同步。

2.2、线程间通信方式

线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制,下面是常用的线程通信机制,如下:

  • 锁机制:通过锁实现线程同步
  • 信号量机制:线程的信号和进程的信号量类似,使用线程的信号量可以高效地完成基于线程的资源计数

2.3、线程同步

实现线程同步的方式有很多种,最常见的就是使用锁机制实现线程同步,线程同步的最终目标是实现对共享资源的安全访问

3、进程与线程的区别

进程是资源分配的最小单位,线程是CPU调度的最小单位,进程与线程的区别,如下:

进程线程
概念进程是对正在运行中的程序的一个抽象,是系统进行资源分配和调度的基本单位线程(thread)是操作系统能够进行运算调度的最小单位,其是进程中的一个执行任务(控制单元),负责当前进程中程序的执行
内存分配系统在运行的时候会为每个进程分配不同的内存空间系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享进程资源
切换开销每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小
包含关系一个进程可以包含多个线程轻量级进程
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值