天天看點

并發與多線程——并發的基本概念,程序、線程基本概念(巨細)

(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)使用難度較高,要小心資料的一緻性問題;

繼續閱讀