C++並行編程1


what is concurrency

我們可以一邊看電視,一邊唱歌。人並行非常容易理解,但是計算機呢?是不是我們一邊編輯着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;
 	}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM