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

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

生活随笔

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

编程问答

并发编程模式

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

一、future模式

在網(wǎng)上購(gòu)物時(shí),提交訂單后,在收貨的這段時(shí)間里無(wú)需一直在家里等候,可以先干別的事情。類(lèi)推到程序設(shè)計(jì)中時(shí),當(dāng)提交請(qǐng)求時(shí),期望得到答復(fù)時(shí),如果這個(gè)答復(fù)可能很慢。傳統(tǒng)的是一直等待到這個(gè)答復(fù)收到時(shí)再去做別的事情,但如果利用Future設(shè)計(jì)模式就無(wú)需等待答復(fù)的到來(lái),在等待答復(fù)的過(guò)程中可以干其他事情。

future模式核心思想就是異步調(diào)用,去除了主函數(shù)的等待時(shí)間,并使得原本需要等待的時(shí)間段可以用于處理其他業(yè)務(wù)邏輯。

下面是時(shí)序圖,左邊是傳統(tǒng)的單線(xiàn)程執(zhí)行,右邊使用了future模式。

?

我們通過(guò)synchronized結(jié)合wait()和notify()、并發(fā)包下的鎖都可以實(shí)現(xiàn)future模式,不過(guò)JDK已經(jīng)為我們提供了future模式的實(shí)現(xiàn),位于java.util.concurrent并發(fā)包下。

具體使用方法可參考文章:https://www.2cto.com/kf/201411/351903.html

?

二、Master-Worker模式

Master-Worker?模式是常用的并行計(jì)算模式。它的核心思想是系統(tǒng)由兩類(lèi)進(jìn)程協(xié)作工作:Master?進(jìn)程和?Worker?進(jìn)程。Master 負(fù)責(zé)接收和分配任務(wù),Worker?負(fù)責(zé)處理子任務(wù)。當(dāng)各個(gè)?Worker?子進(jìn)程處理完成后,會(huì)將結(jié)果返回給?Master?, 由?Master?進(jìn)行歸納和總結(jié)。其好處是能將一個(gè)大任務(wù)分解成若干個(gè)小任務(wù),并行執(zhí)行,從而提高系統(tǒng)的吞吐量。

?

在Master端往往會(huì)有如下的內(nèi)容:

1、一個(gè)盛放任務(wù)的容器,一般使用隊(duì)列來(lái)保證先添加的任務(wù)先執(zhí)行,因?yàn)樵谙旅鎱⒖嘉恼碌睦又?#xff0c;任務(wù)在main方法中被直接一口氣全部提交過(guò)來(lái),所以worker不需要在沒(méi)有任務(wù)可以取的時(shí)候而阻塞等待新任務(wù),也就是不牽涉到阻塞,所以在這里推薦使用非阻塞的線(xiàn)程安全隊(duì)列ConcurrentLinkedQueue性能更好,參考文章中也是使用了這種隊(duì)列。

2、一個(gè)盛放worker的線(xiàn)程集合,worker就是用來(lái)執(zhí)行任務(wù)的,所以就是個(gè)子線(xiàn)程,所以可以使用HashMap<String, Thread>來(lái)盛放,key是每個(gè)worker線(xiàn)程的標(biāo)識(shí)。

3、一個(gè)盛放任務(wù)結(jié)果的集合,和盛放worker的線(xiàn)程集合不同,worker的線(xiàn)程集合就是在初始化Master時(shí)需要指定有多少個(gè)worker的,所以是一并初始化好的,沒(méi)有并發(fā)也就沒(méi)有線(xiàn)程安全問(wèn)題,而任務(wù)結(jié)果的集合會(huì)被多個(gè)worker訪(fǎng)問(wèn),需要線(xiàn)程安全的容器才行,推薦ConcurrentHashMap。

每個(gè)worker端往往會(huì)有如下的內(nèi)容:

1、Master里盛放任務(wù)的容器的引用,因?yàn)樾枰@取任務(wù)。

2、Master里盛放任務(wù)結(jié)果集合,因?yàn)樾枰烟幚硗甑娜蝿?wù)結(jié)果放進(jìn)去。

Master-Worker模式的實(shí)現(xiàn)可參考文章:http://blog.csdn.net/lv_fq/article/details/70853315

?

三、生產(chǎn)者-消費(fèi)者模式

生產(chǎn)者-消費(fèi)者模式是一個(gè)經(jīng)典的多線(xiàn)程設(shè)計(jì)模式。它為多線(xiàn)程間的協(xié)作提供了良好的解決方案。 在生產(chǎn)者-消費(fèi)者模式中,通常由兩類(lèi)線(xiàn)程,即若干個(gè)生產(chǎn)者線(xiàn)程和若干個(gè)消費(fèi)者線(xiàn)程。生產(chǎn)者線(xiàn)程負(fù)責(zé)提交用戶(hù)請(qǐng)求,消費(fèi)者線(xiàn)程則負(fù)責(zé)具體處理生產(chǎn)者提交的任務(wù)。生產(chǎn)者和消費(fèi)者之間則通過(guò)共享內(nèi)存緩沖區(qū)進(jìn)行通信。

?

生產(chǎn)者-消費(fèi)者模式可以通過(guò)線(xiàn)程間通信的方式實(shí)現(xiàn),例如通過(guò)synchronized結(jié)合wait()和notify()、并發(fā)包下的鎖都可以。但最好的方式是使用阻塞隊(duì)列來(lái)實(shí)現(xiàn),阻塞隊(duì)列又是線(xiàn)程安全的這樣不僅高效而且實(shí)現(xiàn)非常簡(jiǎn)單,將阻塞隊(duì)列作為存放數(shù)據(jù)的內(nèi)存緩沖區(qū),通過(guò)調(diào)用阻塞隊(duì)列的阻塞方法put()和take(),開(kāi)發(fā)者不需要寫(xiě)困惑的wait-nofity代碼去實(shí)現(xiàn)通信。

生產(chǎn)者-消費(fèi)者模式的實(shí)現(xiàn)可參考文章:http://blog.csdn.net/yujin753/article/details/45723175

總結(jié)

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

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