欧美亚洲自拍偷拍_日本一区视频在线观看_国产二区在线播放_亚洲男人第一天堂

二維碼
企資網(wǎng)

掃一掃關(guān)注

當(dāng)前位置: 首頁 » 企資快報 » 服務(wù) » 正文

Mysql進(jìn)一步優(yōu)化_性能提升了200_

放大字體  縮小字體 發(fā)布日期:2021-09-20 11:17:53    作者:媒體小英    瀏覽次數(shù):45
導(dǎo)讀

前文回顧在《用好組合索引,性能提升10倍不止!》一文中,我們主要使用了CountDownLatch這個類來優(yōu)化程序的性能,在文末提出了一個思考題:其實,上面的代碼不是允許的,你有更好的優(yōu)化方法嗎? 很多小伙伴的私信其

前文回顧

在《用好組合索引,性能提升10倍不止!》一文中,我們主要使用了CountDownLatch這個類來優(yōu)化程序的性能,在文末提出了一個思考題:其實,上面的代碼不是允許的,你有更好的優(yōu)化方法嗎? 很多小伙伴的私信其實或多或少的說出了一些方案,但是沒說到真正的點子上。

這里,再向小伙伴們提出一個疑問:如果我們不使用CountDownLatch和CompletableFuture,讓你對前文的程序進(jìn)行優(yōu)化,你有思路嗎?

其實思路也很簡單:蕞直接的方式就是創(chuàng)建一個計數(shù)器,將計數(shù)器的初始值設(shè)置為2,當(dāng)子線程1執(zhí)行完hasNoOrders = getHasNoOrders(); 這行代碼時,將計數(shù)器的值減1,當(dāng)子線程2執(zhí)行完 hasNoStock = getHasNoStock(); 這行代碼時,將計數(shù)器的值減1。在主線程中,等待計數(shù)器的值減為0,然后執(zhí)行后續(xù)的業(yè)務(wù)操作。

CountDownLatch類的總體思路也是這樣,小伙伴們可以根據(jù)這個思路自行實現(xiàn)程序性能的優(yōu)化,我就不再這里絮叨啦。

能否進(jìn)一步優(yōu)化?

我們先來看看之前程序的優(yōu)化效果圖。

通過仔細(xì)的分析,我們就會發(fā)現(xiàn):雖然getHasNoOrders()getHasNoStock()這兩個方法實現(xiàn)了并行操作,但是getHasNoOrders()方法和getHasNoStock()方法和checkData()方法與saveCheckResult()方法之間還是串行的,如果能夠讓他們之間的操作并行化,那么系統(tǒng)的性能就可以得到進(jìn)一步提升了。如下圖所示。

如何實現(xiàn)上圖所示的優(yōu)化呢?接下來,我們先說說進(jìn)一步優(yōu)化的總體思路。

進(jìn)一步優(yōu)化思路

查詢未校對的訂單方法getHasNoOrders()和查詢未校對的庫存方法getHasNoStock()能夠并行執(zhí)行,校對數(shù)據(jù)的方法 checkData()還要依賴getHasNoOrders()方法和getHasNoStock()方法的結(jié)果,很明顯可以使用CompletableFuture來優(yōu)化,那除了CompletableFuture還有其他的方式嗎?今天,我們先不講CompletableFuture,先來看看其他的優(yōu)化方式。

大家認(rèn)真思考下,上述的場景中,一個方法的執(zhí)行需要等待另外兩個方法的執(zhí)行結(jié)果,是不是有點生產(chǎn)者-消費者的意思呢?

有些小伙伴可能會說:這哪是生產(chǎn)者和消費者模型???我們仔細(xì)想一下:兩次查詢未校對的數(shù)據(jù)就是生產(chǎn)者,校對數(shù)據(jù)的操作是消費者。

我們可以使用隊列來保存生產(chǎn)者生產(chǎn)的數(shù)據(jù),而消費者就從這個隊列中消費數(shù)據(jù)。

由于查詢未校對的訂單方法getHasNoOrders()和查詢未校對的庫存方法getHasNoStock()是在兩個不同的線程中執(zhí)行的,這里,在具體實現(xiàn)時,我們可以使用兩個隊列分別保存未校對的訂單數(shù)據(jù)和未校對的庫存數(shù)據(jù),校對數(shù)據(jù)的操作每次從隊列1中取出未校對的訂單數(shù)據(jù),從隊列2中取出未校對的庫存數(shù)據(jù),然后再執(zhí)行數(shù)據(jù)的校對操作。

接下來,我們再思考一個問題:就是如何使用兩個隊列實現(xiàn)完全的并行化。

一個簡單的方案就是在線程1中執(zhí)行查詢未校對訂單的數(shù)據(jù),在線程2中執(zhí)行查詢未校對庫存的數(shù)據(jù),當(dāng)線程1和線程2分別生產(chǎn)完一條數(shù)據(jù)時,通知線程3執(zhí)行數(shù)據(jù)的校對操作。這里,有個關(guān)鍵的點就是線程1和線程2的執(zhí)行步調(diào)要一致,不能一個線程執(zhí)行的太快,一個線程執(zhí)行的太慢。

很顯然,線程1和線程2之間會存在相互等待的現(xiàn)象,說到這里,小伙伴們是不是就有解決方案啦?

我們先來說說優(yōu)化的總體思路吧: 首先,進(jìn)一步優(yōu)化存在兩個難點:一個是線程1和線程2執(zhí)行的步調(diào)要一致,另外就是線程1和線程2中每次方法執(zhí)行完畢后,要通知線程3執(zhí)行數(shù)據(jù)校對操作。

我們也可以使用計數(shù)器的方式實現(xiàn),計數(shù)器的初始值為2,線程1執(zhí)行完getHasNoOrders()方法時,對計數(shù)器減1,線程2執(zhí)行完getHasNoStock()方法時,對計數(shù)器減1。如果計數(shù)器的值大于0時,則線程1等待或者線程2等待。如果計數(shù)器的值等于0,則通知線程3執(zhí)行數(shù)據(jù)校對操作,并重新喚醒等待中的線程1或者線程2。同時,需要我們將計數(shù)器的值重新設(shè)置為2,以此往復(fù)實現(xiàn)程序的優(yōu)化效果。

有小伙伴可能會說:這也太麻煩了吧!哈哈,自己實現(xiàn)確實挺麻煩的,不過Java并發(fā)類庫中為我們準(zhǔn)備好了一個實現(xiàn)上述場景的類——沒錯,可以使用Java并發(fā)類庫中的 CyclicBarrier 類實現(xiàn)。

使用CyclicBarrier進(jìn)一步優(yōu)化

使用CyclicBarrier進(jìn)一步優(yōu)化的具體方案就是:首先創(chuàng)建一個計數(shù)器初始值為2的CyclicBarrier對象,在構(gòu)造方法中傳入一個回調(diào)函數(shù),在回調(diào)函數(shù)中執(zhí)行數(shù)據(jù)的校對操作,當(dāng)計數(shù)器的值減為0時,就會執(zhí)行這個回調(diào)函數(shù)。

在線程1中執(zhí)行完getHasNoOrders()方法并將結(jié)果放入隊列1后,執(zhí)行barrier.await()將計數(shù)器減1,同時等待計數(shù)器的值減為0。在線程2中執(zhí)行完getHasNoStock()方法并將結(jié)果放入隊列2后,執(zhí)行barrier.await()將計數(shù)器減1,同時等待計數(shù)器的值減為0。

當(dāng)計數(shù)器的值減為0時,線程1和線程2繼續(xù)向下執(zhí)行,同時會調(diào)用回調(diào)函數(shù)來執(zhí)行數(shù)據(jù)的校對操作。

不僅如此,CyclicBarrier類還能夠自動重置計數(shù)器的值,當(dāng)計數(shù)器的值減為0時,它又會被自動重置為初始值,這個功能使用起來也很方便。

接下來,我們看一下使用CyclicBarrier類優(yōu)化后的核心偽代碼,如下所示。

`// 訂單隊列
Vector<Order> orderQueue;
// 庫存隊列
Vector<Stock> stockQueue;
//創(chuàng)建查詢未校對訂單和未校對庫存的線程池
Executor executor = Executors.newFixedThreadPool(2);
//執(zhí)行數(shù)據(jù)校對的線程池
Executor checkExecutor = Executors.newFixedThreadPool(1);

final CyclicBarrier barrier =
new CyclicBarrier(2, ()->{
executor.execute(() -> checkDataAndSaveResult());
});

void checkDataAndSaveResult(){
Order o = orderQueue.remove(0);
Stock s = stockQueue.remove(0);
//校對數(shù)據(jù)并返回結(jié)果
checkResult = checkData(o, a);
//將結(jié)果信息保存到數(shù)據(jù)校對信息表中
saveCheckResult(checkResult);
}

void checkAllOrdersAndStock(){
//檢測是否存在未對賬訂單
checkOrders = checkOrders();
while(checkOrders != null){
executor.execute(()->{
//查詢未校對的訂單信息
hasNoOrders = getHasNoOrders();
orderQueue.add(hasNoOrders);
barrier.await();
});
executor.execute(()->{
//查詢未校對的庫存記錄
hasNoStock = getHasNoStock();
stockQueue.add(hasNoStock);
barrier.await();
});
}
}
`

至此,整個程序的優(yōu)化操作就完成了。

總結(jié)

在整個程序的優(yōu)化過程中,我們開始使用了CountDownLatch優(yōu)化程序,后面又使用了CyclicBarrier優(yōu)化程序。它兩個的區(qū)別就是:

  • CountDownLatch主要的使用場景就是一個線程等待多個線程執(zhí)行完畢后再執(zhí)行;而CyclicBarrier主要的使用場景為多個線程相互等待。
  • CountDownLatch的計數(shù)器減為0時,無法進(jìn)行重置,不可復(fù)用;而CyclicBarrier的計數(shù)器減為0時,可以自動將計數(shù)器的值重置為初始值,可以復(fù)用。
  • CountDownLatch無法設(shè)置回調(diào)函數(shù);而CyclicBarrier可以設(shè)置回調(diào)函數(shù),當(dāng)計數(shù)器的值減為0時,可以自動執(zhí)行回調(diào)函數(shù)的邏輯。

    好了,今天就到這兒吧,我們下期見~~

  •  
    (文/媒體小英)
    免責(zé)聲明
    本文僅代表作發(fā)布者:媒體小英個人觀點,本站未對其內(nèi)容進(jìn)行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問題,請及時聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
     

    Copyright ? 2016 - 2025 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號

    粵ICP備16078936號

    微信

    關(guān)注
    微信

    微信二維碼

    WAP二維碼

    客服

    聯(lián)系
    客服

    聯(lián)系客服:

    在線QQ: 303377504

    客服電話: 020-82301567

    E_mail郵箱: weilaitui@qq.com

    微信公眾號: weishitui

    客服001 客服002 客服003

    工作時間:

    周一至周五: 09:00 - 18:00

    反饋

    用戶
    反饋

    欧美亚洲自拍偷拍_日本一区视频在线观看_国产二区在线播放_亚洲男人第一天堂

          9000px;">

                国产ts人妖一区二区| 欧美电影在哪看比较好| 91精品国产91热久久久做人人| 精品综合久久久久久8888| 久久久精品国产免费观看同学| av不卡在线观看| 亚洲一二三四在线| 精品乱人伦小说| 国产成人av一区| 亚洲制服欧美中文字幕中文字幕| 日韩美一区二区三区| 成人av网站在线| 亚洲成av人**亚洲成av**| 精品久久久久久最新网址| 色婷婷综合五月| 日本aⅴ亚洲精品中文乱码| 国产精品视频免费| 欧美日韩激情一区| 成人免费毛片app| 亚洲aⅴ怡春院| 日韩理论片在线| 久久一区二区三区四区| 欧美日本一道本在线视频| 99久久久久久| 高清成人免费视频| 久久福利资源站| 午夜婷婷国产麻豆精品| 亚洲人123区| 国产亚洲精品资源在线26u| 6080国产精品一区二区| 色偷偷88欧美精品久久久| 国产电影一区在线| 久久99久久99小草精品免视看| 亚洲一区二区在线观看视频| 国产精品二三区| 国产日韩精品视频一区| 日韩欧美一二三区| 91精品国产一区二区三区蜜臀 | 久久久久久久久久久99999| 9191久久久久久久久久久| 色88888久久久久久影院按摩| 成年人网站91| 懂色一区二区三区免费观看| 国产尤物一区二区| 国产一区在线看| 国产一区二区三区电影在线观看| 美腿丝袜亚洲综合| 美女视频网站久久| 久久se这里有精品| 日韩一级片在线观看| 伦理电影国产精品| 日日夜夜免费精品| 日韩中文字幕一区二区三区| 亚洲大型综合色站| 亚洲成av人片观看| 美国毛片一区二区三区| 久久超级碰视频| 黑人巨大精品欧美一区| 国产麻豆欧美日韩一区| 国产精品一区二区久激情瑜伽 | 国产一区二区三区精品视频| 九一久久久久久| 国产一区二区日韩精品| 国产精品资源网| 成人国产亚洲欧美成人综合网| 成人a级免费电影| av一二三不卡影片| 91成人看片片| 欧美日韩精品欧美日韩精品一综合 | 久久久综合九色合综国产精品| 日韩三区在线观看| 久久新电视剧免费观看| 欧美激情综合网| 亚洲三级在线播放| 丝袜亚洲另类丝袜在线| 九九九精品视频| 粉嫩aⅴ一区二区三区四区五区| 成人va在线观看| 欧美日韩激情在线| 久久久久一区二区三区四区| 国产精品美女www爽爽爽| 一片黄亚洲嫩模| 美女被吸乳得到大胸91| 成人性生交大片免费看中文网站| 色噜噜狠狠成人网p站| 欧美丰满少妇xxxxx高潮对白| 久久综合999| 亚洲欧美另类小说视频| 日韩不卡在线观看日韩不卡视频| 国产一区视频在线看| 91在线视频播放地址| 91精品国产丝袜白色高跟鞋| 国产欧美日韩视频一区二区| 亚洲一区在线看| 国产呦萝稀缺另类资源| 在线免费不卡视频| 2020国产精品自拍| 亚洲一区在线观看免费| 国产在线播精品第三| 色av综合在线| 2014亚洲片线观看视频免费| 一区二区三区精品久久久| 极品少妇xxxx精品少妇| 欧美系列日韩一区| 中文字幕第一区二区| 午夜精品一区在线观看| 国产99一区视频免费| 欧美肥大bbwbbw高潮| 亚洲欧美激情在线| 国产精品一区二区久久不卡| 欧美日韩国产免费一区二区| 国产精品久久看| 精品综合久久久久久8888| 欧美日韩国产片| 亚洲欧洲美洲综合色网| 久久精品99国产精品| 在线看日韩精品电影| 中文幕一区二区三区久久蜜桃| 蜜臀久久久久久久| 91美女视频网站| 中文字幕欧美日韩一区| 免费黄网站欧美| 在线日韩国产精品| 中文字幕在线观看不卡视频| 国产一区二区精品久久| 日韩精品在线一区| 亚洲国产精品麻豆| 一本色道久久综合精品竹菊| 国产日产欧美一区二区三区| 久久99日本精品| 制服丝袜亚洲色图| 亚洲一区二区精品视频| 一本大道av一区二区在线播放| 在线视频欧美区| 欧美日韩国产精选| 亚洲综合一二区| 色婷婷国产精品综合在线观看| 国产精品理论片| 国产精品1024| 欧美精品一区二区在线观看| 日本欧美一区二区在线观看| 欧美日韩国产小视频| 亚洲一区在线观看网站| 欧美亚洲国产一区二区三区 | 国产精品国产三级国产专播品爱网| 国模套图日韩精品一区二区| 欧美成人一级视频| 久久国产精品区| 欧美va亚洲va国产综合| 日本美女视频一区二区| 91精品欧美福利在线观看 | 视频一区二区三区中文字幕| 欧美视频自拍偷拍| 亚洲午夜久久久久| 欧美日韩一区中文字幕| 香蕉加勒比综合久久| 欧美另类高清zo欧美| 麻豆国产欧美日韩综合精品二区| 欧美一级久久久| 久久99精品久久久久久动态图| 久久欧美中文字幕| 丁香婷婷综合色啪| 亚洲少妇屁股交4| 欧美午夜宅男影院| 日本不卡不码高清免费观看| 日韩一区二区精品在线观看| 国内精品伊人久久久久av一坑| 久久久国际精品| 成人精品视频一区二区三区尤物| 国产精品久久精品日日| 91美女在线视频| 日韩激情一区二区| 精品区一区二区| 国产精品亚洲人在线观看| 国产精品国产三级国产aⅴ原创| 色综合久久久久综合99| 视频一区二区欧美| 久久色视频免费观看| 成年人国产精品| 天天色天天爱天天射综合| 欧美成人精品高清在线播放| 成人午夜激情视频| 午夜视频在线观看一区二区三区| 精品国产污网站| 91麻豆国产香蕉久久精品| 日韩精品福利网| 国产性天天综合网| 日本国产一区二区| 精品一区二区三区蜜桃| 亚洲欧洲精品一区二区精品久久久| 欧美日韩一二三| 国产成人8x视频一区二区 | 高清在线不卡av| 国产精品入口麻豆九色| 91麻豆.com| 秋霞av亚洲一区二区三| ㊣最新国产の精品bt伙计久久| 欧美视频在线一区二区三区 | 精品三级在线观看| 91美女在线看|