C++並行編程1
我們可以一邊看電視,一邊唱歌。人並行非常容易理解,但是計算機呢?是不是我們一邊編輯著word文檔,一邊聽著歌,這樣計算機就是在並行嗎?不一定歐,如果你計算機是單核,就一定不是並行了,而是把你的任務分成你根本感覺不到的任務片,近似在並行執行,其實是在串行執行。如果是雙核,也不一定,有可能一個核上同時執行兩個任務,也有可能是並行歐,不同核執行不同的任務。
並行執行有兩種實現方法:
多進程:啟動比較復雜並且比較慢,操作系統需要額外的資源來管理進程,但是容易寫比線程安全的代碼。
多線程:線程之間更容易通信,啟動和通信也比進程開銷小。
why use concurrency
拆分任務
合理利用性能
通常有三種並行的方法:
task parallelism
把一個任務拆分成不同部分,並行執行
data parallelism
把數據分成不同部分,線程在不同數據上執行相同操作。
embarrassingly parallel
算法變為並行執行算法
why not use concurrency
執行任務容易完成,但是線程啟動也需要開銷
啟動線程太多,容易消耗完內存和地址空間(特別是32位機器),容易消耗完系統資源,比如每個鏈接建立一個線程,還有切換開銷。
hello world
需要在C++11環境下編譯。
#include <iostream>
#include <thread>
void hello()
{
std::cout<<"hello world"<<std::endl;
}
int main()
{
std::thread t(hello);
t.join();
return 0;
}