深入併發程式設計(一)基礎理論

2021-08-14 06:51:47 字數 2021 閱讀 9973

隨著做開發的時間越來越長,接觸的東西多了之後。就會發現腦子是越來越不夠用了,編寫本系列部落格的初衷也是這樣,單純用於記錄我學習併發的過程。

要理解併發,首先要區別併發(concurrency)與並行(parallellism)。

並行:多個任務同時執行。

併發:多個任務看起來同時執行。

我們來舉個栗子:

在單核cpu的情況下:假設按摩店裡只有乙個小妹(cpu)

這個時候你和你的同事兩個人同時去按摩店裡按摩。

按摩小妹的速度非常快,在你和你的同事之間來回切換,由於小妹的速度很快,你和你的同事覺得彷彿有兩個小妹在同時給你們做按摩。

沒有錯,這種情況就是併發。

你和你的同時感覺有兩個小妹在同時給你們按摩。但是實際上只有乙個小妹(cpu)。

而並行的話很容易理解:

你和你的同時去按摩店,按摩店裡有兩個小妹,同時的給你們兩個人按摩。
在理解了併發的意思之後,我們需要明確我們為什麼需要讓我們的程式併發執行,併發的好處是什麼,或者說,在什麼情況下我們是需要併發的。

首先:我們進行併發程式設計的目的,是為了充分的利用處理器的每乙個核,以達到最高的處理效能

針對這個結論,我們又有了新的問題:

通過我們上面按摩的例子,大家可以知道,在單核cpu(乙個按摩小妹)的情況下,執行乙個多執行緒的程式,同一時間只有乙個執行緒被執行(同一時間按摩小妹只能按摩乙個人),只是因為cpu的速度很快,所以多執行緒看起來是同時在執行的。

這個時候,cpu的速度是固定的,但是要執行的任務變成了多個,那麼以時間角度來說,cpu執行完乙個任務再執行另乙個任務(序列執行)所要花費的時間比併發執行多個任務花費的時間要少。 這是因為cpu在併發執行多個任務的時候,同一時刻是只能執行乙個執行緒的,那麼多個執行緒之間切換的過程也會增加時間的開銷。

所以:在單核cpu的情況下,併發並不一定能提公升效能,反而會因為執行緒之間的切換而造成額外的開銷。

但是要注意這個結論中加粗的「並不一定」幾個字。 我們還需要分析這樣的情況:

在單核cpu的情況下:

只有乙個按摩小妹給你乙個人在按摩,這個時候你來**了,或者有其他的事情導致你必須中斷你的按摩(執行緒阻塞),那麼這個時候按摩小妹就會處於一種無事可做的狀態,一直阻塞到你可以重新回來被按摩為止。

而這一段空閒時間,按摩小妹完全可以去按摩其他人(執行其他執行緒)。

由此我們可以得出結論:

單核cpu,且執行緒無阻塞的情況下:單執行緒執行效率要比多執行緒高。

無論使用什麼技術,我們都有乙個統一原則:

如果:付出》收益,那麼就不適合。與之相反,如果:付出《收益,就是適合的。

併發程式設計也是一樣的,我們在使用多執行緒技術進行併發程式設計的時候,一定要考慮:

增加執行緒所帶來的額外開銷是否大於該執行緒能抵消的阻塞時間

也就是說:執行緒並不是越多越好的,多執行緒技術的出現是為了彌補執行緒的阻塞導致的執行緒資源浪費以及多核cpu下任務的並行(注意不是併發)執行問題

併發程式設計只是多執行緒技術的乙個部分

多執行緒解決了併發和並行的問題。

n核cpu同時執行n個任務叫做並行。

n核cpu執行n+個任務叫做併發。

那麼我們什麼時候使用併發合適呢?

併發和並行的區別

併發並不一定能提高效率,讓任務併發執行時,一定要考慮執行緒併發所帶來的額外開銷(執行緒切換)是否小於執行緒阻塞的時間開銷。

多執行緒≠併發,多執行緒技術是實現併發和並行的一種方式。只有開闢多於cpu核數的執行緒任務才叫做併發程式設計。

Java Socket程式設計基礎理論

理論部分 ip位址的,ip位址就相當於 主機的名字。網路上的ip位址具有全球唯一性 主機與主機之間要有相同的 協議。這個就相當於人與人通訊之間的 暗號。都遵循這個暗號的伺服器就能互相識別對方傳送的資訊。計算機是死的,要進行 通訊,其實是兩台計算機之間的 程式在交換資料。在網路上給 每一程式分配乙個埠...

網路程式設計基礎理論

優點 建立了統一的工作流程 分部清晰,各司其職,每個步驟分工明確 降低了各個模組之間的耦合度,便於開發 高內聚 含義 單個封裝模組內部的功能更加的單一而不是相互摻雜 應用層 傳輸層 網路層 網際層 物理鏈路層 網路介面 http協議屬於應用層 七層 四層模型 傳送端由應用程式傳送資訊,逐層新增首部資...

BT基礎理論(一)

前言bt bt 一 基礎概念 1bt 2 bt 種子 檔案 bt 3 種子 bt服務把提供完整檔案的使用者節點稱為 種子 seed 4 torrent 檔案的作用 5 torrent 檔案內容詳解 bt種子檔案使用了一種叫bencoding的編碼方法來儲存資料。bencoding現有四種型別的資料 ...