首先,我们先理解并发和并行的区别。
你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。并发的关键是你有处理多个任务的能力,不一定要同时。
所以我认为它们最关键的点就是:是否是『同时』。
并行的关键是你有同时处理多个任务的能力。
如上所示,并发可以理解为在同一时间段内发生,而并行是指两个事件的发生是处于平行状态的,即同时发生的。
我们知道JavaScript是不支持多线程的,而python、php、java等是支持多线程的,同样,c++也是支持多线程编程的。
在c++11中,有下面的头文件是用来支持多线程编程的:
- <atomic>: 该头文件声明了两个类,即std::atomic以及st::atomic_flag。
- <thread>: 该头文件主要声明了std::thread类。
- <mutex>: 中文是互斥量的意思。该头文件中主要声明了与互斥量(mutex)相关的类,比如std::lock_gruad以及std::unique_lock等,以及其他的类型和函数。
- <condition_variable>: 该头文件声明了与条件变量相关的类,包括std::condition_variable以及std::condition_variable_any。
- <future>: 该头文件主要声明了std::promise,std::package_task两个Provider类以及std::future和std::shared_future类,另外还有一些与之相关的类型和函数,std::async()函数就声明在这个头文件中。
来源:https://www.cnblogs.com/zhuzhenwei918/p/9107555.html