C++11多線程 併發、進程、線程基本概念和綜述

目錄

1、併發、線程、進程的概念

1.1併發

1.2可執行程序

1.3進程

1.4線程

1.5學習心得

二、併發的實現方法

2.1多進程併發

2.2多線程併發

2.3總結

三:C++11新標準線程庫


1、併發、線程、進程的概念

1.1併發

兩個或者多個任務(獨立的活動)同時發生:一個程序同時執行多個獨立的任務;

單核CPU的計算機在某一個時刻只能執行一個任務,由操作系統調度,進行多次的“任務切換”,產生併發的假象(不是真正的併發);這種切換是要有時間開銷的,比如操作系統要保存切換時的各種狀、執行進度等信息,切換回來時要復原這些信息。

隨着硬件的發展,出現了多處理器計算機(用於服務器和高性能計算領域);臺式機:在一塊芯片上有多核,能夠實現真正的並行執行多個任務(硬件併發)。

使用併發的動機:主要就是同時可以幹多個事,提高性能。

1.2可執行程序

磁盤上的一個文件,如windovs下一個擴展名爲.exe。

1.3進程

運行起來的可執行程序,一個可執行程序運行起來了,就創建了一個進程。

1.4線程

a)每個進程(執行起來的可執行程序)都有一個主線程,這個主線程是唯一的,也就是一個進程中只能有一個主線程。

b)當執行程序,產生了一個進程後,這個主線程就隨着這個進程默默的啓動起來了;ctrl+f5運行程序的時候,實際上是進程的主線程來調用這個main()函數中的代碼。

主線程與進程脣齒相相依的關係,有你必然有我;

線程:用來執行代碼的;線程這個東西理解成一條代碼的執行通路;

除了主線程之外,我們可以通過自己寫代碼來創建其他線程,其他線程運行其他的道路,每創建一個新線程,就可以在同一個時刻,多走一條不同的代碼執行路徑。

多線程(併發)

線程不是越多越好,每個線程,都需要一個獨立的堆棧空間(1M),線程之間的切換要保存很多中間狀態;切換會耗費本該屬於程序運行的時間。

總結線程:

a)線程是用來執行代碼的;

b)把線程這個東西理解成一條代碼的執行通路(道路),一個新線程代表一條新的通路;

c)一個進程自動包含一個主線程,主線程隨着進程默的啓動,我們可以創建多個其他線程(非主線程)。但是創建的數量不建議超過200-300個,至於到底多少個合適,在實際的項目中可以不斷調整和優化,有時候線程太多的時候效率反而會降低,因爲上下文切換會佔用大量時間。

d)因爲主線程是自動啓動的,所以一個進程中最少也有一個線程。

e)說白了:多線程程序可以同時幹多個事,所以運行效率高。但是到底有多高,不是一個很易評估和量化的東西;大家仍舊需要在實際項目中進行體會和調整優化。

1.5學習心得

開發多線程:實力的體現,商用的必須需求;

線程開發有一定難度。實現代碼更復雜。理解上更難一些,需要一定的學習時間。

C++線程會涉及很多新概念,對於C++道路上的成長特別關鍵,不要急於求成;

網絡通訊,網絡服務器,網絡方向。多線程是絕對繞不開的,必須得學。

二、併發的實現方法

實現併發的手段:

a)通過多個進程實現併發。

b)在單獨的進程中,創建多個線程來實現併發;自己寫代碼來創建除了主線程之外的其他線程;

2.1多進程併發

word啓動後就是進程,IE瀏覽器啓動後也是個進程。

賬號服務器,遊戲邏輯服務器。服務器講程之間通信。

進程之間通信(同一個電腦上:管道,文件,消息對列,共享內存;不同電腦上:socket通信技術)

2.2多線程併發

單個進程中,創建了多個線程

線程:輕量級的進程。每個線程都有自己獨立的運行路徑,但是一個進程中的所有線程共享地址空間(共享內存)。

全局變量,指針,引用都可以在線程之間傳遞;所以,使用多線程開銷遠遠小於多進程。

共享內存帶來新問題,數據一致性問題;

多進程併發和多線程併發雖然可以混合使用,但建議,優先考慮多線程技術手段而不是多進程。

本章中,只講多線程併發開發技術,後續談到的併發,都只的是多線程併發。

2.3總結

和進程比,線程如下優點:

(1)線程啓動速度更快,更輕量級

(2)系統資源開銷更少,執行速度更快,比如共享內存這種通信方式比任何其他的通信方式都快;

缺點:使用有一定難度,要小心處理據的一致性問題。

三、C++11新標準線程庫

windows可以通過createThread()、_beginthred(),_beginthredexe()創建線程;linux:pthread_create()創建線程;但是這種多線程代碼不能跨平臺。

通過POSIX(pthread)庫跨平臺;需要做一番配置,所以用起來它也很不方便。

從C++11新標準,C++語言本身增加對多線程的支持,意味着可移植性(跨平臺),這大大減少開發人員工作量了。

 

注:該文是C++11併發多線程視頻教程筆記,詳情可學習:https://study.163.com/course/courseMain.htm?courseId=1006067356

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章