C++并发编程 (1) 基本知识

1. 什么是并发和多线程

2. 为什么要使用并发和多线程

2011年发布的C++11开始支持多线程程序。并在库中为编写多线程应用程序提供组件,这使得在不依赖平台相关扩展编写多线程程序成为可能。

首先介绍,什么是并发?

从简单和基本的层面讲,并发是指两个或者更多独立的活动同时发生,那么计算机系统中的并发的定义是什么?
计算机系统中的并发指的是:单个系统里同时执行多个独立的活动,而不是顺序地或者一个接一个的。以前,大多数计算机只有一个处理器,,具有单个处理单元或者核心。在每一时刻只能执行一个任务,但是可以在不同的任务之间进行快速切换。看起来像是并发,但这实际上是一种“伪并发”。可以详细介绍一下这种切换。处理器每次在任务之间进行交替切换吗,都要执行一次上下文切换动作。为了执行上下文切换,操作系统必须为当前运行的任务保存CPU的状态和指令指针,算出要切换到哪个任务,并为要切换到的任务重新加载处理器状态。

现在,具有多个处理器,或者单个多核处理器的计算机,每个处理器或者每个核心都能够执行一个任务,是能够实现正真的并发。我们称之为“硬件并发”。

现在,有些处理器可以在一个核心上执行多个线程,要考虑的是硬件线程的数量,即硬件可以真正并发运行多少个独立的任务,即便在正真正具有硬件变并发的系统上,也很容易有超过硬件并发数量的任务要执行,所以在这种情况下,任务切换任然将被使用。

1. 多进程并发

这种方法是将应用程序分为多个独立的,单线程的进程,他们运行在同一时刻。这些独立的进程之间可以进行相互之间的通信。(所有常规的进程间的通信渠道,信号,套接字,文件,管道),如下图所示:

C++并发编程 (1) 基本知识

多进程并发的缺点:
1. 进程之间的通信设置较为复杂,且通信速度较慢。(因为操作系统通常会在进程之间提供大量的保护,以避免一个进程不小心修改了属于另一个进程的数据)。

2.运行多个进程需要一定的,固有的开销 

3. 启动进程需要时间,而且操作系统需要投入内部资源来管理进程。

多线程并发的优点:

1. 上述的第一条缺点,从另一个方向看,也可以是优点,因为操作系统在进程之间提供的附加保护操作和更高级别的通信机制,所以可以更加容易的编写安全的并发代码。

2. 通过独立的进程实现并发,可以通过网络链接到不同机器上独立运行的进程,虽然增加了通信成本,但是在一个精心设计的系统上,它可能是一个提高并行可用性和提高性能的低成本方法。

2. 多线程并发

并发的另一个途径是在单个进程中运行多个线程,线程很像轻量级的进程:因为每一个线程可以独立运行不同的指令序列。但是进程之间的所有线程都共享相同的地址空间,并且从所有线程中访问到大部分数据。两个线程之间通过共享内存进行通信的方式如下图所示:

C++并发编程 (1) 基本知识

多线程并发的优点:
1. 共享的内存空间,以及缺少进程间的数据保护。使得多线程并发的开销远远低于多进程。因为操作系统要做的薄记更少。

多线程并发的缺点:

1. 上述的优点1,也会带来一些问题,共享内存虽然灵活性更高,但是也需要付出代价。如果数据被多个线程访问,那么必须保证每个线程访问时看到的数据是一致的,否则线程之间的数据共享可能会遇到问题。但是这些是可以克服的。

相比于启动多个单线程的进程并在期间进行通信,启动单一进程中的多个线程的并在其间进行通信的开销更低。此外,c++标准并没有为进程之间的通信提供任何原生的支持,所以使用多进程的应用程序必须依赖平台相关的API来实现。

为什么使用并发:

1. 关注点分离

2.提高i性能

1. 为了划分关注点而使用并发

在编写软件的时候,划分关注点是一个好主意,将相关的代码放在一起并将无关的代码分开,可是使得程序更加易于理解和测试,从而减少出错的可能性。

例如,对于一台DVD播放设备:

C++并发编程 (1) 基本知识

 

2.为了性能而采用并发
主要有两种实现方式:

1  . 任务并发

将一个单个任务分解成几部分为能, 然后各自并行运行,从而降低总运行时间

2.  数据并发

每个线程在不同的数据部分上执行相同的操作。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原文链接: https://www.cnblogs.com/ncepubye/p/12724007.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++并发编程 (1) 基本知识

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/396499

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月6日 上午11:21
下一篇 2023年4月6日 上午11:21

相关推荐