Concurrency in C++
并发方式
目前来看并发方式有两种,多进程并发和多线程并发。
多进程并发
这种方法可以被用在基于网络的多机器协同计算上,但是数据交互需要时间。
多线程并发
两个thread在同一个process里。Threads are much like lightweight processes.
多线程之间共享了一个内存空间,全局变量仍然是全局的,指针可以用来进行线程间交互。这种方法对数据保护就差很多。
在不同的进程中,同一个位置的数据可能对于不同线程具有不同的内存地址。
设计思路
设计思路可以从程序结构上进行线程划分而不考虑throughput。
也可以从performance来进行考虑,为了提高计算速度,我们有两种思路:task parallelism是把task分为不同部分然后每一部分并行,这设计起来很复杂。另一种是data parallelism,这种就可以用同样的方法处理一个数据的不同部分,设计起来很简单。当然这也与我们需要执行的任务相关。数据并行可以增加系统的吞吐量,使得视频等内容的实时处理和显示成为可能。
存在的问题
多线程编程实际上存在一些固有时间开销。
例子
#include <iostream>
#include <thread>
void hello()
{
std::cout<<"Hello Concurrent World\n";
}<