汕頭網(wǎng)站建設系統(tǒng)學校網(wǎng)站建設
C++11并發(fā)與多線程筆記(1)
- 1、并發(fā)、進程、線程的基本概念和綜述
- 1.1 并發(fā)
- 1.2 可執(zhí)行程序
- 1.3 進程
- 1.4 線程
- 1.5 學習心得
- 2、并發(fā)的實現(xiàn)方法
- 2.1 多進程并發(fā)
- 2.2 多線程并發(fā)
- 3、C++11新標準線程庫
1、并發(fā)、進程、線程的基本概念和綜述
1.1 并發(fā)
指在一個時間段內(nèi)有多個進程在執(zhí)行
- 兩個或者更多的任務(獨立的活動)同時發(fā)生(進行):一個程序同時執(zhí)行多個獨立的任務;
- 以往計算機,單核cpu(中央處理器):某一個時刻只能執(zhí)行一個任務,由操作系統(tǒng)調(diào)度,每秒鐘進行多次所謂的“任務切換”。并發(fā)的假象(不是真正的并發(fā)),切換(上下文切換)時要保存變量的狀態(tài)、執(zhí)行進度等,存在時間開銷;
- 隨著硬件發(fā)展,出現(xiàn)了多處理器計算機:用于服務器和高性能計算領(lǐng)域。臺式機:在一塊芯片上有多核(一個CPU內(nèi)有多個運算核心,對于操作系統(tǒng)來說,每個核心都是作為單獨的CPU對待的):雙核,4核,8核,10核(自己的筆記本是4核8線程的)。能夠?qū)崿F(xiàn)真正的并行執(zhí)行多個任務(硬件并發(fā));
- 使用并發(fā)的原因:主要就是同時可以干多個事,提高性能。
1.2 可執(zhí)行程序
磁盤上的一個文件,windows下,擴展名為.exe;linux下,ls -la,rwx(可讀可寫可執(zhí)行)
1.3 進程
計算機中的程序關(guān)于某數(shù)據(jù)集合上的一次運行活動,是系統(tǒng)進行資源分配的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ),一段程序的執(zhí)行過程。
- 運行一個可執(zhí)行程序(在windows下,可雙擊;在linux下,./文件名), 進程,一個可執(zhí)行程序運行起來了,就叫創(chuàng)建了一個進程。
進程就是運行起來的可執(zhí)行程序
1.4 線程
是操作系統(tǒng)能夠進行運算調(diào)度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發(fā)多個線程,每條線程并行執(zhí)行不同的任務。
(1)
- 每個進程(執(zhí)行起來的可執(zhí)行程序),都有唯一的一個主線程
- 當執(zhí)行可執(zhí)行程序時,產(chǎn)生一個進程后,這個主線程就隨著這個進程默默啟動起來了
- ctrl+F5運行這個程序的時候,實際上是進程的主線程來執(zhí)行(調(diào)用)這個main函數(shù)中的代碼。線程:用來執(zhí)行代碼的。
線程這個東西,可以理解為一條代碼的執(zhí)行通路
(2)
- 除了主線程之外,可以通過寫代碼來創(chuàng)建其他線程,其他線程走的是別的道路,甚至去不同的地方
- 每創(chuàng)建一個新線程,就可以在同一時刻,多干一個不同的事(多走一條不同的代碼執(zhí)行路徑)
(3)多線程(并發(fā))
線程并不是越多越好,每個線程,都需要一個獨立的堆??臻g(大約1M),線程之間的切換要保存很多中間狀態(tài),切換也會耗費本該屬于程序運行的時間
必須使用多線程的案例
1.5 學習心得
- 開發(fā)多線程程序:一個是實力的體現(xiàn),一個是商用的必須需求
- 線程開發(fā)有一定難度
- C++線程會設計很多新概念
- 網(wǎng)絡方向:網(wǎng)絡通訊、網(wǎng)絡服務器,多線程是絕對繞不開的
2、并發(fā)的實現(xiàn)方法
實現(xiàn)并發(fā)的手段:
- 通過多個進程實現(xiàn)并發(fā)
- 在單獨的進程中,寫代碼創(chuàng)建除了主線程之外的其他線程來實現(xiàn)并發(fā)
2.1 多進程并發(fā)
- 比如賬號服務器一個進程,游戲服務器一個進程。
- 服務器進程之間存在通信(同一個電腦上:管道,文件,消息隊列,共享內(nèi)存);(不同電腦上:socket通信技術(shù))
2.2 多線程并發(fā)
- 線程:感覺像是輕量級的進程。每個進程有自己獨立的運行路徑,但一個進程中的所有線程共享地址空間(共享內(nèi)存),全局變量、全局內(nèi)存、全局引用都可以在線程之間傳遞,所以多線程開銷遠遠小于多進程
- 多進程并發(fā)和多線程并發(fā)可以混合使用,但建議優(yōu)先考慮多線程技術(shù)
- 本課程中只講多線程并發(fā)技術(shù) B站C++11并發(fā)與多線程
3、C++11新標準線程庫
以往
- windows:CreateThread(), _beginthread(),_beginthreadexe()創(chuàng)建線程;linux:pthread_create()創(chuàng)建線程;不能跨平臺
- 臨界區(qū),互斥量
- POSIX thread(pthread):跨平臺,但要做一番配置,也不方便
C++11
- 從C++11新標準,C++語言本身增加對多線程的支持,意味著可移植性(跨平臺),這大大減少開發(fā)人員的工作量