1. 程式人生 > >C++並發多線程(一)

C++並發多線程(一)

線程 棧空間 調度 系統 運行 tac 切換 有時 非阻塞

並發:兩個或者更多的任務同時發生,一個程序同時執行多個獨立的任務。

以往計算機 單核CPU 某一個時刻只能執行一個任務 由操作系統調度 每秒鐘進行多次所謂的任務切換
並發的假象(不是真正的並發),這種切換(上下文切換)時要有時間開銷的。

線程

每個進程(執行起來的可執行程序),都有一個主線程 這個主線程是唯一的 也就是一個進程中只能有一個主線程。
當你執行要給刻執行程序 ,產生了一個進程後 這個主線程就隨著這個進程默默啟動起來了
ctrl+f5運行這個程序的時候,實際上是進程的主線程來執行 這個main函數中的代碼
主線程與進程唇齒相依
線程 用來執行代碼的 一條代碼的執行道路
主線程是系統創建的 其他線程走的是別的道路 甚至去不同的地方

每創建一個新線程 我就可以在同一個時刻 多幹一個不同的是
多線程(並發)
線程並不是越多越好 每個線程 都需要一個獨立的堆棧空間(1M) 線程間的切換要保存很多的中間狀態;
切換會耗費本該屬於程序運行的時間;


總結線程:
線程是用來執行代碼的
把線程這個東西理解成一條代碼的執行通路 一個新線程代表一條新的通路
一個進程自動包含一個主線程 主線程隨著進程默默的啟動並進行 我們可以通過編碼來創建多個其他現場呢g
//建議創建的數量不超過200-300個,有的時候線程太多反而降低效率
//因為主線程是自動啟動的 所以一個進程中最少也是有一個線程(主線程)

join():同步 用於阻塞線程,表示當前線程結束了,才可以執行後面的代碼。

detach():異步 非阻塞模式,由操作系統去調用線程。

C++並發多線程(一)