日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

架构之:并发和并行

發(fā)布時(shí)間:2024/2/28 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 架构之:并发和并行 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 簡(jiǎn)介
  • 并發(fā)和并行
    • 并發(fā)concurrency
    • 并行執(zhí)行Parallel Execution
    • 并行并發(fā)執(zhí)行 Parallel Concurrent Execution
    • 并行*parallelism*
  • 總結(jié)

簡(jiǎn)介

在現(xiàn)代程序中,我們經(jīng)常會(huì)使用到兩個(gè)關(guān)鍵詞:并發(fā)concurrency和并行parallelism,雖然兩者的英文單詞區(qū)別很大,但是翻譯成中文之后幾乎是一樣的。雖然中文以其優(yōu)美的語(yǔ)法和工整的寫法凌駕于英語(yǔ)之上,但是帶來(lái)的復(fù)雜性和翻譯的多意性往往會(huì)給技術(shù)工作者一點(diǎn)點(diǎn)煩惱。

沒關(guān)系,今天本文為大家解密一下并發(fā)和并行的聯(lián)系和區(qū)別。

注意,本文所講的并發(fā)和并行的概念都是指在同一個(gè)應(yīng)用程序中。

并發(fā)和并行

事實(shí)上除了并發(fā)concurrency和并行parallelism,還有2個(gè)狀態(tài):并行執(zhí)行Parallel Execution 和 并行并發(fā)執(zhí)行 Parallel Concurrent Execution。接下來(lái)我們來(lái)分別講解一下他們的區(qū)別。

并發(fā)concurrency

大家知道java中有一個(gè)非常有用的并發(fā)包叫做java.util.concurrent,里面有很多非常有用的類,用來(lái)處理多線程之間的資源競(jìng)爭(zhēng)問(wèn)題。根據(jù)并發(fā)包的作用,大家應(yīng)該就可以猜到并發(fā)和并行的最大區(qū)別在于是否有資源搶占的情況。

我們來(lái)舉個(gè)最近爆火的打新冠疫苗的例子,在本地沒有確診病例之前,大家都不慌著打疫苗,資源相對(duì)就比較多,不需要搶,所以不存在并發(fā)問(wèn)題。

但是當(dāng)一個(gè)地方出現(xiàn)了確診病例之后,大家都慌了,于是搶著去打疫苗,造成了資源的緊張,于是產(chǎn)生了并發(fā)問(wèn)題。

為了更好的描述這個(gè)并發(fā)問(wèn)題,假設(shè)我們有10個(gè)人排成了兩支隊(duì)伍要去打疫苗,結(jié)果只有一個(gè)打疫苗的窗口。那么一個(gè)很可能的策略就是窗口交替給兩個(gè)隊(duì)伍的人打疫苗。我們做個(gè)圖來(lái)表示:

上圖表示的就是并發(fā)concurrency的情況,一個(gè)窗口同時(shí)只能處理一個(gè)任務(wù),所以兩個(gè)隊(duì)伍在爭(zhēng)奪窗口這個(gè)資源。

資源爭(zhēng)奪過(guò)程中會(huì)產(chǎn)生各種鎖的問(wèn)題,從而需要特別小心。

并行執(zhí)行Parallel Execution

并行執(zhí)行的意思是兩個(gè)互相不干擾的任務(wù)同時(shí)進(jìn)行。也就是說(shuō)任務(wù)之間并沒有資源的競(jìng)爭(zhēng)關(guān)系,所以不會(huì)產(chǎn)生鎖的問(wèn)題。如果用在打疫苗的問(wèn)題上,并行執(zhí)行就是說(shuō)現(xiàn)在有兩個(gè)窗口,每個(gè)隊(duì)列都可以分到一個(gè)窗口,不會(huì)產(chǎn)生競(jìng)爭(zhēng)關(guān)系。

并行執(zhí)行是程序執(zhí)行中最理想的情況,這種情況下資源是充足的,只需要考慮具體的業(yè)務(wù)邏輯即可,并不需要考慮他們之間的交互和資源占用關(guān)系。

并行并發(fā)執(zhí)行 Parallel Concurrent Execution

并行并發(fā)執(zhí)行的的意思就是在并行的過(guò)程中還存在著并發(fā)。以打疫苗的例子就是,現(xiàn)在有兩個(gè)體育館,每個(gè)體育館都只有一個(gè)打疫苗的窗口,對(duì)于兩個(gè)體育館來(lái)說(shuō)他們是并行的。但是對(duì)于每個(gè)體育館中的每個(gè)窗口來(lái)說(shuō),又是并發(fā)執(zhí)行的。

并行并發(fā)執(zhí)行狀態(tài)應(yīng)該是一般的應(yīng)用程序中的基本狀態(tài)。執(zhí)行不同任務(wù)的線程是并行執(zhí)行的,他們的資源是隔離的,所以互不影響。但是執(zhí)行同一個(gè)任務(wù)的多個(gè)線程之間又是并發(fā)的,他們之間會(huì)搶占資源,所以需要進(jìn)行并發(fā)控制。

并行parallelism

parallelism和Parallel翻譯起來(lái)好像沒有什么太大的區(qū)別,前面一個(gè)是專業(yè)的計(jì)算機(jī)名稱表示并行性,后面一個(gè)可以用在任何地方,表示并行。

那么在計(jì)算機(jī)中,parallelism指的是什么意思呢?

其實(shí)它是指一個(gè)任務(wù)的可并行程度。比如5個(gè)人的打疫苗的任務(wù),可以將5個(gè)人分成5個(gè)小組,每個(gè)小組都可以去爭(zhēng)取自己的資源來(lái)執(zhí)行,這其中可以并發(fā)也可以并行,這就是并行性parallelism的意思。我們用下面的圖來(lái)表示:

總結(jié)

講了這么多,大家明白他們之間的區(qū)別了嗎?

本文已收錄于 http://www.flydean.com/05-concurrency-parallelism/

最通俗的解讀,最深刻的干貨,最簡(jiǎn)潔的教程,眾多你不知道的小技巧等你來(lái)發(fā)現(xiàn)!

歡迎關(guān)注我的公眾號(hào):「程序那些事」,懂技術(shù),更懂你!

總結(jié)

以上是生活随笔為你收集整理的架构之:并发和并行的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。