(1)并發、程序、線程的基本概念和綜述
(1.1)并發
a)兩個或者更多的任務(獨立的活動)同時(發生)進行;一個程式同時執行多個獨立的任務
b)以往計算機,單核CPU(中央處理器);某個時刻隻能執行一個任務,由作業系統排程,每秒鐘進行多次所謂的“任務切換”(并發的假象,不是真正的并發);
c)這種切換(上下文切換)是要有使勁按開銷的,比如作業系統要儲存你切換時的各種狀态,執行進度,多需要時間,并且切換回來的時候要複原這些資訊。
d)硬體發展:出現了多處理器計算機:用于伺服器和高性能計算領域。能夠實作真正的并發執行任務(硬體并發);
f)使用并發的原因:主要就是同時可以幹多個事情,提高性能。
(1.2)可執行程式
硬碟上的一個檔案,Windows下,一個擴充名為.exe的檔案,Linux下,ls -ls ,rwxrwxrwx(執行權限);
(1.3)程序(運作中的程式)
windows下,輕按兩下一個可執行程式來運作。Linux下,./檔案名 ./a;
程序:就是運作中的可執行程式;
(1.4)線程
a)每個程序(執行起來的可執行程式),都有一個主線程,這個主線程時唯一的,也就是一個程序中隻能有一個主線程(C++代碼中,主線程就是main()函數)
b)當你執行可執行程式,産生了一個程序後,這個主線程就随着這個程序默默啟動起來了;
c)主線程與程序唇齒相依,有你必然有我,沒有我必然沒有你(一個程序中最少有一個線程(主線程))
d)線程:用來執行代碼的。(可了解為一條通路(執行通路))
e)除了主線程外,我們可以通過自己寫代碼來建立其他線程,其他線程走的是别的道路,甚至去不同的地方。
f)每建立一個線程,就可以在同一時刻,多幹一個不同的事。
g)線程并不是越多越好,每個線程,都需要一個獨立的堆棧空間(預設為1M),線程之間的切換要儲存很多中間狀态;切換線程會耗費本該屬于線程的時間;線程太多反而會降低效率。
(1.5)學習心得
a)開發多線程程式:實力的展現。一個是商用的必須需求;
b)線程開發有一定難度。實作代碼更複雜。了解上更難一些,需要一定的學習時間。/c++線程會涉及很多新概念,對于c+道路上的成長特别關鍵,不要急于求成;
c)想拿高薪。網絡通訊,網絡伺服器,網絡方向。多線程是絕對繞不開的必須得學
(2)并發的實作方法
并發:兩個或者更多的任務(獨立的活動)同時發生(進行)
實作并發的手段:
a通過多個程序實作并發。
b)在單獨的程序中,建立多個線程來實作并發;可通過寫代碼來建立除了主線程之外的其他線程;
(2.1)多程序并發
網易雲啟動後就是程序。ie浏覽器啟動後就是個程序。
帳号伺服器,遊戲邏輯伺服器。伺服器程序之間的通信。
程序之間通信(同一個電腦正:管道,檔案,消息對列,共享記憶體);
(2.2)多線程并發(單個程序中,建立多個線程)
線程:很像是輕量級的程序,每個線程都有自己的獨立的運作路徑;但是一個程序中,所有線程共享位址空間。并且全局變量,指針,引用 都可以線上程之間傳遞,是以:使用多線程開銷遠遠小于多程序。
共享記憶體問題:資料一緻性問題。
多程序并發和多線程并發可以混合使用,但是不建議。(優先考慮多線程技術)
(2.3)總結
線程和程序比,優點:
(1)線程啟動速度更快,更輕量級;
(2)系統資源開銷更少,執行速度更快,比如共享記憶體這種通信方式比其他任何通信方式夠快;
缺點:
(1)使用難度較高,要小心資料的一緻性問題;