【C++并发简介】


前言

本文主要内容

  • 何谓并发和多线程
  • 应用程序为什么要使用并发和多线程
  • C++的并发史
  • 一个简单的C++多线程程序

一、何谓并发

最简单和最基本的并发,是指两个或更多独立的活动同时发生。

1.1 计算机系统中的并发

计算机领域的并发指的是在单个系统里同时执行多个独立的任务,而非顺序的进行一些活动。

在这里插入图片描述
并发的两种方式:双核机器的真正并行,单核机器的任务切换

在这里插入图片描述
四个任务在两个核心之间的切换

1.2 并发的途径

  1. 每个进程只要一个线程
  2. 每个进程有多个线程
  • 多进程并发

在这里插入图片描述
一对并发运行的进程之间的通信

  • 多线程并发
    在这里插入图片描述
    同一进程中的一对并发运行的线程之间的通信

多个单线程/进程间的通信(包含启动)要比单一进程中的多线程间的通信(包括启动)的开销大,若不考虑共享内存可能会带来的问题,多线程将会成为主流语言(包括C++)更青睐的并发途径。

1.3 并发与并行

其区别主要在于关注点和意图方面(差距甚微),都是用来对硬件在同时执行多个任务的方式进行描述的术语,不过并行更加注重性能

二、为什么使用并发

主要原因有两个:

  1. 关注点分离(SOC)
  2. 性能

2.1 为了分离关注点

通过将相关的代码与无关的代码分离,可以使程序更容易理解和测试,从而减少出错的可能性。

2.2 为了性能

两种方式利用并发提高性能:

  1. 第一,将一个单个任务分成几部分,且各自并行运行,从而降低总运行时间。这就是任务并行(task parallelism)。
  2. 使用可并行的方式,来解决更大的问题,例如:并行处理图片就能提高视频的分辨率。

2.3 什么时候不使用并发

基本上,不使用并发的唯一原因就是收益比不上成本。

三、C++中的并发和多线程

3.1 C++多线程历史

在C++98标准下,在缺少编译器相关扩展的情况下,没办法编写多线程应用程序。

3.2 新标准支持并发

C++11标准的发布而改变,新标准中不仅有了一个全新的线程感知内存模型,C++标准库也扩展了:包含了用于

  • 管理线程、
  • 保护共享数据、
  • 线程间同步操作,
  • 以及低层原子操作的各种类。

3.4 C++线程库的效率

  • C++标准委员会在设计标准库时,特别是标准线程库的时候,该类库在大部分主流平台上都能实现高效。
  • 使用了新标准的代码会具有更好的可移植性,而且更容易维护。
  • C++标准库也提供了更高级别的抽象和工具,使得编写多线程代码更加简单,并且不易出错。

四、开始入门

4.1 你好,并发世界

#include<iostream>
int main()
{
	std::cout << "Hello World" << std::endl;
}
#include<iostream>
#include<thread>             //1 增加了 #include <thread> 

static void hello()          //2 打印信息的代码被移动到了一个独立的函数中
{
	std::cout << "Hello Concurrent World" << std::endl;
}

int main()
{
	std::thread t(hello);    //3
	t.join();				 //4
	system("pause");
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值