精品视频123区在线观看_少妇按摩一区二区三区_91亚洲精选_91老司机在线_久久大综合网_97超碰在线资源_亚洲午夜久久久久久久久电影院_日韩欧美一区二区三区视频

二維碼
企資網(wǎng)

掃一掃關(guān)注

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

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

放大字體  縮小字體 發(fā)布日期:2021-09-20 11:17:53    作者:媒體小英    瀏覽次數(shù):47
導(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

    反饋

    用戶
    反饋

    手机看片福利在线观看| 欧美精品电影在线| 色欲av无码一区二区人妻| 国内爆初菊对白视频| 亚洲精品无播放器在线播放| 亚洲国产精品精华液ab| 国产在线视频一区| 国产无遮挡裸体免费视频| 91涩漫在线观看| 成人午夜激情在线| 国产精品视频免费在线观看| 午夜三级在线观看| 色的视频在线免费看| 久久久综合精品| 国产欧美日韩在线播放| 99产精品成人啪免费网站| 国产三级在线免费| 国产suv一区二区三区88区| 国产精品日韩在线观看| 亚洲第一精品在线观看| 日韩av大片站长工具| 成人午夜在线播放| 91视频免费网站| 亚洲视频在线观看一区二区| 欧美大片1688网站| 在线影视一区二区三区| 国产一区二区在线视频播放| 黄色毛片网站| 麻豆精品网站| 日韩av电影国产| 日韩 欧美 精品| 91成人抖音| 中文在线一区二区| 日韩亚洲视频| 国产又黄又爽又猛免费app| 亚洲天堂免费| 久久国产精品视频| 欧美精品成人久久| 中文av在线全新| 欧洲亚洲国产日韩| 亚洲高清av一区二区三区| 在线天堂av| 久久精品盗摄| 国产精品第七十二页| 97人妻一区二区精品视频| 秋霞午夜一区二区三区视频| 日韩女优制服丝袜电影| 亚洲一区二区三区黄色| 一级日本在线| 亚洲成人动漫av| 男女超爽视频免费播放| 美女av网站| 久久久国产精品午夜一区ai换脸 | 先锋影音av男人站| 欧美性色综合| 国产精品久久久久久久久男| 精品国产av 无码一区二区三区| 欧美精品一区二区久久| 久久国产精品久久精品| 成人公开免费视频| 亚洲动漫在线观看| 欧美日韩福利视频| 亚洲专区第一页| 欧美岛国激情| 国产福利精品在线| 国产人妖在线播放| 欧美激情1区2区| 国产一区二区丝袜| 亚洲精品手机在线| 日韩国产欧美在线播放| 国产亚洲福利社区| 日本免费网站| eeuss影院一区二区三区| 一区二区三区四区在线视频| 97超碰在线资源站| 国产日韩av一区| 丝袜老师办公室里做好紧好爽| 色天堂在线视频| 同产精品九九九| 91亚洲一线产区二线产区| 欧美xxxx视频| 欧美一区二区视频网站| 四季av中文字幕| 精品视频一区二区三区在线观看| 在线成人激情黄色| 久久青青草原亚洲av无码麻豆| 国产精品密蕾丝视频下载| 国产91精品青草社区| 天堂在线观看av| 日韩1区2区日韩1区2区| 亚洲国产另类久久久精品极度| 18深夜视频在线观看| 国产欧美日韩不卡免费| 亚洲欧美久久久久| 丁香花在线观看完整版电影| 亚洲第一福利在线观看| 国产性猛交╳xxx乱大交| 你懂的一区二区三区| 国产精品96久久久久久又黄又硬 | 欧美日韩二三区| 91这里只有精品| 日韩一区二区三区高清免费看看| wwwav国产| 欧美性xxx| 久久国内精品一国内精品| 精品国产一级片| 日本视频一区二区| a级黄色片免费| 伊人免费在线| 亚洲精品按摩视频| 亚洲熟妇av乱码在线观看| 一本色道久久综合亚洲精品不卡| 日本不卡在线观看| 一级视频在线免费观看| 欧美伊人久久大香线蕉综合69| 亚洲视频重口味| 久久在线视频| 久久久久久艹| 亚洲激情文学| 91精品婷婷国产综合久久| 国产乡下妇女做爰视频| 欧美破处大片在线视频| 精品久久久久久亚洲| 日韩黄色网址| 日韩一区二区免费视频| 国产黄色免费视频| 美女在线一区二区| 国产男女在线观看| 亚洲www免费| 5278欧美一区二区三区| 美女裸体自慰在线观看| 亚洲国产精品久久久久婷婷884| 黄色av片三级三级三级免费看| 国产精品中文字幕亚洲欧美| 好吊色欧美一区二区三区| 天堂中文在线资| 亚洲国产精品字幕| 欧美在线 | 亚洲| 91在线看国产| 无码一区二区精品| av在线不卡顿| 视频一区二区综合| 4438x成人网全国最大| 深夜福利亚洲导航| 欧美另类色图| 亚洲一区二区三区影院| 欧美精品videos极品| 亚洲欧美成人| 热久久精品免费视频| 麻豆一二三区精品蜜桃| 亚洲综合日韩在线| 神马亚洲视频| 国产一区二区成人| 国产真实乱全部视频| 亚洲最新视频在线播放| 日韩xxxxxxxxx| 日韩国产一区二| 五月天中文字幕在线| 国产一区二区三区亚洲| 九色91在线视频| 欧美猛烈性xbxbxbxb| 久久久电影免费观看完整版| 初体验·韩国| 欧美亚洲精品一区| 91久久久久久久久久久久| 95精品视频在线| 亚洲女优在线观看| 亚洲91久久| 国产精品无码av在线播放| 亚洲欧洲日韩精品在线| 成人性色av| 在线网址91| 国产精品久久久久7777婷婷| 性感av在线播放| 久久精品成人欧美大片| av先锋资源网| 亚洲国产精品久久久久久| 欧美日本黄色| 欧美视频在线一区二区三区| 亚洲国产精品一| 亚洲资源中文字幕| 亚洲综合五月天婷婷丁香| 日本一区二区三区在线观看| 黄色小说在线观看视频| 丁香五精品蜜臀久久久久99网站 | 五月激情丁香网| 久久久精品国产免费观看同学| 久久国产免费观看| 国产一区二区在线免费观看| 日本一级免费视频| 免费高清不卡av| 国产成人福利在线| 蜜桃av一区二区| 日本xxxxxxxxx18| 老司机一区二区| 老头老太做爰xxx视频| 麻豆91精品91久久久的内涵| 国产又黄又粗视频| 韩国v欧美v亚洲v日本v| 成人一级黄色大片|