併發:兩個或者更多的任務同時發生,一個程序同時執行多個獨立的任務。多線程
以往計算機 單核CPU 某一個時刻只能執行一個任務 由操做系統調度 每秒鐘進行屢次所謂的任務切換
併發的假象(不是真正的併發),這種切換(上下文切換)時要有時間開銷的。併發
線程異步
每一個進程(執行起來的可執行程序),都有一個主線程 這個主線程是惟一的 也就是一個進程中只能有一個主線程。
當你執行要給刻執行程序 ,產生了一個進程後 這個主線程就隨着這個進程默默啓動起來了
ctrl+f5運行這個程序的時候,其實是進程的主線程來執行 這個main函數中的代碼
主線程與進程脣齒相依
線程 用來執行代碼的 一條代碼的執行道路
主線程是系統建立的 其餘線程走的是別的道路 甚至去不一樣的地方
每建立一個新線程 我就能夠在同一個時刻 多幹一個不一樣的是
多線程(併發)
線程並非越多越好 每一個線程 都須要一個獨立的堆棧空間(1M) 線程間的切換要保存不少的中間狀態;
切換會耗費本該屬於程序運行的時間;函數
總結線程:
線程是用來執行代碼的
把線程這個東西理解成一條代碼的執行通路 一個新線程表明一條新的通路
一個進程自動包含一個主線程 主線程隨着進程默默的啓動並進行 咱們能夠經過編碼來建立多個其餘現場呢g
//建議建立的數量不超過200-300個,有的時候線程太多反而下降效率
//由於主線程是自動啓動的 因此一個進程中最少也是有一個線程(主線程)編碼
join():同步 用於阻塞線程,表示當前線程結束了,才能夠執行後面的代碼。操作系統
detach():異步 非阻塞模式,由操做系統去調用線程。線程