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

发布时间:2024年01月17日

一、进程与线程

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),线程之间切换的开销小
包含关系一个进程可以包含多个线程轻量级进程
文章来源:https://blog.csdn.net/cloud323/article/details/135654691
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。