何谓并发

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

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

要注意:并行和并发是两个概念
在计算机系统中,并发是通过时间片轮转来使得两个程序想同时运行一样。
并发和并行的区别:双核的为并行


当然,真正的并行不可能是一个任务不断的去占用一个核心,而是像下图一样的。通过时间片,让同一任务在不同的核心上运行:

并发的途径

  1. 进程:将应用程序分为多个独立的进程,它们在同一时刻运行,就像同时进行网页浏览和文字处理一样。
    进程通信:

  2. 线程:在单个进程中运行多个线程。每个线程相互独立运行,且线程可以在不同的指令序列中运行。
    线程通信:

并发编程的优势

  1. 分离关注点:通过将相关的代码与无关的代码分离,可以使程序更容易理解和测试。
  2. 性能:提高性能有两种方式。首先,将单个任务分成几部分且各自运行,从而降低总运行时间,这就是任务并行;其次,每个线程在不同的数据部分上执行相同的操作,这叫做数据并行

那么问题来了,什么时候不适宜使用并发呢?
收益比不上成本!
除非潜在的性能增益足够大或关注点分离的足够清晰,能抵消所需的额外的开发时间与维护多线程代码相关的额外成本;否则别用并发!

第一个并发程序

#include<iostream>
#include<thread> //线程库头文件

using namespace std;
void hello()
{
   
	cout<< "Hello concurrent world!>>endl;
}

int main()
{
   
	thread t(hello);
	t.join();
}

向绝大多数程序一样,每个线程都必要一个初始函数,新线程的执行从这里开始。初始线程始于main(),而新线程始于hello()

对应用程序来说,初始线程是main(),但是对于其他线程,可以在std::thread对象的构造函数中指定,本例执行的就是hello()程序。

参考文献

[1]C++并发编程.Anthony Wilaiams