摘要:并發(fā)與并行并發(fā)與并行的概念并行多個(gè)實(shí)例或者多臺(tái)機(jī)器同時(shí)執(zhí)行一段處理邏輯,是真正的同時(shí)。并發(fā)通過(guò)調(diào)度算法,讓用戶看上去同時(shí)執(zhí)行,實(shí)際上從操作層面不是真正的同時(shí)。并行與并發(fā)的異同點(diǎn)相似性都是為了合理且最大化利用系統(tǒng)的資源。
并發(fā)(concurrency)與并行(parallellism)
并發(fā)與并行的概念
??并行:多個(gè)cpu實(shí)例或者多臺(tái)機(jī)器同時(shí)執(zhí)行一段處理邏輯,是真正的同時(shí)。
??并發(fā):通過(guò)cpu調(diào)度算法,讓用戶看上去同時(shí)執(zhí)行,實(shí)際上從cpu操作層面不是真正的同時(shí)。并發(fā)往往在場(chǎng)景中有公用的資源,那么針對(duì)這個(gè)公用的資源往往產(chǎn)生瓶頸,我們會(huì)用TPS或者QPS來(lái)反應(yīng)這個(gè)系統(tǒng)的處理能力。
并行與并發(fā)的異同點(diǎn)
??相似性:都是為了合理且最大化利用系統(tǒng)的資源。
??差異性:并發(fā)(concurrency)與并行(parallellism)這兩種概念理解起來(lái)比較容易混淆,我就在如下進(jìn)行詳細(xì)講解。
????
??如上圖所示,并發(fā)(concurrency)是指在一個(gè)cpu處理的線程中一直不斷的切換任務(wù),最終給人的感覺(jué)就像同時(shí)執(zhí)行了多個(gè)任務(wù)。而并行(parallellism)在多個(gè)cpu同一時(shí)間處理多個(gè)任務(wù)(在一個(gè)cpu中出現(xiàn)不了并行的狀態(tài))
并發(fā)(concurrency)與并行(parallellism)的實(shí)例
??在簡(jiǎn)單的傳統(tǒng)模式中的生產(chǎn)者及消費(fèi)者模式中就能體現(xiàn) 并發(fā)(concurrency)與并行(parallellism)的實(shí)例:
/** * 生產(chǎn)者生產(chǎn)出來(lái)的產(chǎn)品交給店員 */ public synchronized void produce(){ if(this.product >= MAX_PRODUCT){ try{ wait(); System.out.println("產(chǎn)品已滿,請(qǐng)稍候再生產(chǎn)"); } catch(InterruptedException e){ e.printStackTrace(); } return; } this.product++; System.out.println("生產(chǎn)者生產(chǎn)第" + this.product + "個(gè)產(chǎn)品."); notifyAll(); //通知等待區(qū)的消費(fèi)者可以取出產(chǎn)品了 }
/** * 消費(fèi)者從店員取產(chǎn)品 */ public synchronized void consume() { if(this.product <= MIN_PRODUCT) { try { wait(); System.out.println("缺貨,稍候再取"); } catch (InterruptedException e) { e.printStackTrace(); } return; } System.out.println("消費(fèi)者取走了第" + this.product + "個(gè)產(chǎn)品."); this.product--; notifyAll(); //通知等待去的生產(chǎn)者可以生產(chǎn)產(chǎn)品了 }
在傳統(tǒng)的模式中生產(chǎn)者和消費(fèi)者在同一線程中得意實(shí)現(xiàn)就算線程并發(fā)(concurrency),如果生產(chǎn)者模式和消費(fèi)者模式在不同的線程中進(jìn)行實(shí)現(xiàn),就算做并行(parallellism)。
?????????????參考文檔:https://www.cnblogs.com/wxd01...
?????????????圖片來(lái)源:https://zhidao.baidu.com/ques...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/76959.html
摘要:垃圾回收算法與垃圾回收器綜述我們常說(shuō)的垃圾回收算法可以分為兩部分對(duì)象的查找算法與真正的回收方法。串行垃圾回收器一次只使用一個(gè)線程進(jìn)行垃圾回收并行垃圾回收器一次將開(kāi)啟多個(gè)線程同時(shí)進(jìn)行垃圾回收。 垃圾回收算法與 JVM 垃圾回收器綜述歸納于筆者的 JVM 內(nèi)部原理與性能調(diào)優(yōu)系列文章,文中涉及的引用資料參考 Java 學(xué)習(xí)與實(shí)踐資料索引、JVM 資料索引。 showImg(https://s...
摘要:是目前的實(shí)驗(yàn)收集器。也是需要暫停程序一切的工作,然后多線程執(zhí)行垃圾回收。與最大的不同,它關(guān)注的是垃圾回收的吞吐量。這里的吞吐量指的是總時(shí)間與垃圾回收時(shí)間的比例。篩選回收,評(píng)估標(biāo)記垃圾,根據(jù)模式回收垃圾。 《對(duì)象搜索算法與回收算法》介紹了垃圾回收的基礎(chǔ)算法,相當(dāng)于垃圾回收的方法論。接下來(lái)就詳細(xì)看看垃圾回收的具體實(shí)現(xiàn)。 上文提到過(guò)現(xiàn)代的商用虛擬機(jī)的都是采用分代收集的,不同的區(qū)域用不同的收集...
摘要:適用收集場(chǎng)景新生代收集老年代收集并行收集器又叫吞吐量收集器應(yīng)用于多核系統(tǒng)。它是為了平衡延時(shí)和吞吐量之間的一種最優(yōu)關(guān)系。 回顧傳統(tǒng)垃圾回收器 HotSpot 垃圾收集器實(shí)現(xiàn) Serial Collector(串型收集器) 使用場(chǎng)景,大多數(shù)服務(wù)器是單核CPU。適用收集場(chǎng)景:1. 新生代收集(Young Generation Collection)2. 老年代收集(Old Genera...
摘要:中關(guān)于線程的標(biāo)準(zhǔn)庫(kù)是,之前在版本中的在之后更名為,無(wú)論是還是都應(yīng)該盡量避免使用較為底層的而應(yīng)該使用。而與線程相比,協(xié)程尤其是結(jié)合事件循環(huán)無(wú)論在編程模型還是語(yǔ)法上,看起來(lái)都是非常友好的單線程同步過(guò)程。 項(xiàng)目地址:https://git.io/pytips 要說(shuō)到線程(Thread)與協(xié)程(Coroutine)似乎總是需要從并行(Parallelism)與并發(fā)(Concurrency)談起...
摘要:虛擬機(jī)棧區(qū)也就是通常所說(shuō)的棧區(qū),它描述的是方法執(zhí)行的內(nèi)存模型,每個(gè)方法被執(zhí)行的時(shí)候都創(chuàng)建一個(gè)棧幀,用于存儲(chǔ)局部變量表操作數(shù)棧動(dòng)態(tài)鏈接方法出口等。每個(gè)方法被調(diào)用到完成,相當(dāng)于一個(gè)棧幀在虛擬機(jī)棧中從入棧到出棧的過(guò)程。 大多數(shù)情況下我們對(duì)GC的了解都只是淺層含義上的,下面我們來(lái)詳細(xì)講解下內(nèi)部的一些實(shí)現(xiàn)原理。講解GC之前,我們得先了解下JVM的內(nèi)存結(jié)構(gòu),才能讓我們理解GC導(dǎo)致是干嘛的。 一.J...
閱讀 1273·2021-09-27 13:35
閱讀 2574·2021-09-06 15:12
閱讀 3389·2019-08-30 15:55
閱讀 2838·2019-08-30 15:43
閱讀 440·2019-08-29 16:42
閱讀 3451·2019-08-29 15:39
閱讀 3071·2019-08-29 12:28
閱讀 1248·2019-08-29 11:11