首先,我們先理解並發和並行的區別。
你吃飯吃到一半,電話來了,你一直到吃完了以后才去接,這就說明你不支持並發也不支持並行。
你吃飯吃到一半,電話來了,你停了下來接了電話,接完后繼續吃飯,這說明你支持並發。
你吃飯吃到一半,電話來了,你一邊打電話一邊吃飯,這說明你支持並行。並發的關鍵是你有處理多個任務的能力,不一定要同時。
所以我認為它們最關鍵的點就是:是否是『同時』。
並行的關鍵是你有同時處理多個任務的能力。
如上所示,並發可以理解為在同一時間段內發生,而並行是指兩個事件的發生是處於平行狀態的,即同時發生的。
我們知道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()函數就聲明在這個頭文件中。