何谓并发
最简单和最基本的并发,是指两个或更多独立的活动同时发生。
在计算机领域的并发指的是在单个系统里同时执行多个独立的任务,而非顺序的进行一些活动。
要注意:并行和并发是两个概念!
在计算机系统中,并发是通过时间片轮转来使得两个程序想同时运行一样。
并发和并行的区别:双核的为并行
当然,真正的并行不可能是一个任务不断的去占用一个核心,而是像下图一样的。通过时间片,让同一任务在不同的核心上运行:
并发的途径
-
进程:将应用程序分为多个独立的进程,它们在同一时刻运行,就像同时进行网页浏览和文字处理一样。
进程通信:
-
线程:在单个进程中运行多个线程。每个线程相互独立运行,且线程可以在不同的指令序列中运行。
线程通信:
并发编程的优势
- 分离关注点:通过将相关的代码与无关的代码分离,可以使程序更容易理解和测试。
- 性能:提高性能有两种方式。首先,将单个任务分成几部分且各自运行,从而降低总运行时间,这就是任务并行;其次,每个线程在不同的数据部分上执行相同的操作,这叫做数据并行。
那么问题来了,什么时候不适宜使用并发呢?
收益比不上成本!
除非潜在的性能增益足够大或关注点分离的足够清晰,能抵消所需的额外的开发时间与维护多线程代码相关的额外成本;否则别用并发!
第一个并发程序
#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