C 執行緒(序列 並行 同步 非同步)詳解

2022-10-04 00:54:10 字數 2190 閱讀 4398

c++  執行緒(序列 並行 同步 非同步)詳解

首先,程序可理解成乙個可執行檔案的執行過程。在ios app上的話我們可以理解為我們的app的.ipa檔案執行過程也即app執行過程。殺掉app程序就殺掉了這個app在系統裡執行所佔的記憶體。

執行緒:執行緒是程序的最小單位。乙個程序裡至少有乙個主線程。就是那個main thread。非常簡單的app可能只需要乙個主線程即ui執行緒。當然大部分還是會有一些子執行緒的,比如如果你用了afnetworking,你的請求都是開闢了子執行緒。

關於序列,並行,同步,非同步,我還是以下面**的方式做個說明。

首先button點選事件執行在主線程裡,先是在主線程裡做了列印了一句話,然後建立了乙個序列或者並行的佇列,之後連續建立了3個同步或者非同步的block任務放入此佇列中,最後再在主線程裡列印一句話。

- (ibaction)serialsync:(id)sender

if (i == 499999999)

}});

} nslog(@"阻塞我沒有?當前執行緒%@",[nsthread currentthread]);

}- (ibaction)serialasync:(id)sender

if (i == 499999999)

}});

} uisvezbrfnslog(@"阻塞我沒有?當前執行緒%@",[nsthread currentthread]);

}- (ibaction)concurrentsync:(id)sender

if (i == 499999999)

}});

} nslog(@"阻塞我沒有?當前執行緒%@",[nsthread currentthread]);

}- (ibaction)concurrentasync:(id)sender

if (i == 499999999)

}});

} nslog(@"阻塞我沒有?當前執行緒%@",[nsthread currentthread]);

}最後的結果如圖:

其中我把第一句列印和最後一句列印用玫紅色表示,它們都執行在當前執行緒。

方框表示佇列,3個block任務分別為3種不同的顏色。

可以看出:

序列即上乙個block任務執行完畢下乙個任務才加入到佇列中。

並行即其中的任務同時加入到佇列中。

從執行結果來看

第乙個圖只有乙個主線程:

3個block都是同步即都阻塞當前執行緒,所以最後那句列印的任務就在3個block執行完之後。

3個block又是序列,所以乙個乙個執行

第二個圖有2個執行緒即乙個主線程乙個子執行緒:

3個block都是非同步,沒有任務阻塞當前執行緒。所以最後那句列印是在第一句列印後就可以開始執行的。

3個block都是非同步,非同步會建立新的執行緒即至少有乙個子執行緒。

3個block是序列,只有乙個任務做完才會加另乙個任務入佇列,所以只需乙個子執行緒。

第三個圖只有乙個主線程:

3個block都是同步即都阻塞當前執行緒,所以最後那句列印的任務就在3個block執行完之後。

3個block是並行,同時被加入佇列中。

3個block都是同步,由於同步意味著等待,所以任務的執行表現為順序執行,其實是一起加進去的但是等待的,跟序列的區別是序列是別的任務做完才把它加進佇列中。

第四個圖有多個執行緒:

3個block都是非同步,沒有任務阻塞當前執行緒。所以最後那句列印是在第一句列印後就可以開始執行的。

3個block都是非同步,非同步會建立新的執行緒即至少有乙個子執行緒。

3個block是並行,需建立多個子執行緒才能保證任務同時執行。

再看一張圖:其中第乙個非同步為玫紅色,兩個同步分別以紫色黃色表示,兩個非同步分別以綠色棕色表示,佇列後面的當前執行緒動作為橘色。虛線代表等待。上面代表序列,下面是並行。

由此圖可以看出:

同步block會阻塞當前執行緒,即會在當前執行緒中執行。(這裡的當前程式設計客棧執行緒為主執行緒所以會看到ui卡住)

非同步block會開闢新的執行緒。

在序列佇列中,非同步block任務用的是同乙個子執行緒,因為需要等待任務乙個乙個地執行,不需要多個執行緒。

在並行佇列中,非同步block任務同時執行,系統為其分配執行緒。圖中的例子因第乙個非同步操作在第二個開始前已經結束了,所以並不是多少個非同步操作就建立多少執行緒,主要還是看需要。

本文標題: c++ 執行緒(序列 並行 同步 非同步)詳解

本文位址:

併發並行同步非同步多執行緒

自 首先理解概念 你吃飯吃到一半,來了,你一直到吃完了以後才去接,這就說明你不支援併發也不支援並行。你吃飯吃到一半,來了,你停了下來接了 接完後繼續吃飯,這說明你支援併發。不一定是同時的 你吃飯吃到一半,來了,你一邊打 一邊吃飯,這說明你支援並行。併發的關鍵是你有處理多個任務的能力,不一定要同時。並...

併發 並行 同步 非同步

併發 任務數量大於核心數,兩個或多個時間在同一時間間隔發生 並行 任務數量小於或等於核心數,兩個或多個時間在同一時間發生 你吃飯吃到一半,來了,你一直到吃完了以後才去接,這就說明你不支援併發也不支援並行。你吃飯吃到一半,來了,你停了下來接了 接完後繼續吃飯,這說明你支援併發。不一定是同時的 你吃飯吃...

序列與並行 同步和非同步序列通訊

一 序列通訊中資料按位傳輸,即一次傳輸一位 二 並行傳輸中資料按位元組傳輸,即一次傳輸8位。三 優缺點 並行速度快,但造價高,內部的多根線纜同步較困 難,相互之間易產生干擾,在遠距離通訊中多用串 行通訊,計算機內部大多使用並行通訊。四 使用序列通訊的介面是序列介面,使用並行通訊的介面是並行介面。序列...