精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

性能提升了200%?。▋?yōu)化篇)

開發(fā) 架構(gòu)
由于這個數(shù)據(jù)校對系統(tǒng)最初不是我開發(fā)的,我了解了下數(shù)據(jù)校對系統(tǒng)的業(yè)務(wù),整體來說,數(shù)據(jù)校對系統(tǒng)的業(yè)務(wù)還是比較簡單的。用戶通過商城提交訂單后,會在訂單微服務(wù)中生成訂單信息,保存在訂單數(shù)據(jù)庫中。

 [[414791]]

最近不少運(yùn)營同事找到我說:咱們的數(shù)據(jù)校對系統(tǒng)越來越慢了,要過很久才會顯示出校對結(jié)果,你能不能快速優(yōu)化一下呢?我:好的,我先了解下業(yè)務(wù),后續(xù)優(yōu)化下。

優(yōu)化背景

由于這個數(shù)據(jù)校對系統(tǒng)最初不是我開發(fā)的,我了解了下數(shù)據(jù)校對系統(tǒng)的業(yè)務(wù),整體來說,數(shù)據(jù)校對系統(tǒng)的業(yè)務(wù)還是比較簡單的。用戶通過商城提交訂單后,會在訂單微服務(wù)中生成訂單信息,保存在訂單數(shù)據(jù)庫中。訂單微服務(wù)會調(diào)用庫存微服務(wù)的接口,扣減商品的庫存數(shù)量,并且會將每筆訂單扣減庫存的記錄保存在庫存數(shù)據(jù)庫中。為了防止用戶提交訂單后沒有扣減庫存,或者重復(fù)扣減庫存,數(shù)據(jù)校對系統(tǒng)每天會校驗(yàn)訂單中提交的商品數(shù)量與扣減的庫存數(shù)量是否一致,并且會將校對的結(jié)果信息保存到數(shù)據(jù)校對信息表中。

數(shù)據(jù)校對系統(tǒng)的總體流程為:先查詢訂單記錄,然后在查詢庫存的扣減記錄,然后對比訂單和庫存扣減記錄,然后將校對的結(jié)果信息保存到數(shù)據(jù)校對信息表中,整體流程如下所示。

為了能夠讓大家更好的了解數(shù)據(jù)校對系統(tǒng)對于訂單和庫存的校對業(yè)務(wù),我將代碼精簡了下,核心業(yè)務(wù)邏輯代碼如下所示。

  1. //檢測是否存在未對賬訂單 
  2. checkOrders = checkOrders(); 
  3. while(checkOrders != null){ 
  4.     //查詢未校對的訂單信息 
  5.     hasNoOrders = getHasNoOrders(); 
  6.     //查詢未校對的庫存記錄 
  7.     hasNoStock = getHasNoStock(); 
  8.     //校對數(shù)據(jù)并返回結(jié)果 
  9.     checkResult = checkData(hasNoOrders, hasNoStock); 
  10.     //將結(jié)果信息保存到數(shù)據(jù)校對信息表中 
  11.     saveCheckResult(checkResult); 
  12.     //檢測是否存在未對賬訂單 
  13.     checkOrders = checkOrders(); 

好了,上述就是系統(tǒng)優(yōu)化的背景,想必看到這里,很多小伙伴應(yīng)該知道問題出在哪里了。我們繼續(xù)往下看。

問題分析

雖然很多小伙伴應(yīng)該已經(jīng)知道系統(tǒng)性能低下的問題所在了,這里,我們就一起詳細(xì)分析下校對系統(tǒng)性能低下的原因。

既然運(yùn)營的同事說數(shù)據(jù)校對系統(tǒng)越來越慢了,我們首先要做的就是找到系統(tǒng)的性能瓶頸所在。據(jù)了解,目前的數(shù)據(jù)對賬系統(tǒng),由于訂單記錄和庫存扣減記錄數(shù)據(jù)量巨大,所以查詢未校對的訂單信息的方法getHasNoOrders()和查詢?yōu)樾Φ膸齑嬗涗浀姆椒╣etHasNoStock()相對來說比較慢。并且在數(shù)據(jù)校對系統(tǒng)中,校對訂單和庫存記錄的方法是單線程執(zhí)行的,我們可以簡單畫一個時間抽線圖,如下所示。

由圖可以看出,以單線程的方式getHasNoOrders()方法和getHasNoStock()方法耗費(fèi)了大量的時間,這兩個方法本身在邏輯上就是兩個獨(dú)立的方法,并且這兩個方法沒有先后的執(zhí)行的順序依賴。那這兩個方法能不能并行執(zhí)行呢?很顯然是可以的。那我們把getHasNoOrders()方法和getHasNoStock()方法分別放到兩個不同的線程中,優(yōu)化下系統(tǒng)的性能,整體流程如下所示。

優(yōu)化后,我們將getHasNoOrders()方法放到線程1中執(zhí)行,getHasNoStock()方法放到線程2中執(zhí)行,checkData()方法和saveCheckResult()方法發(fā)放到線程3中執(zhí)行,優(yōu)化后的系統(tǒng)性能相比優(yōu)化前的系統(tǒng)性能幾乎提升了一倍,優(yōu)化效果相對來說還是比較明顯的。

說到這里,大家應(yīng)該應(yīng)該知道具體怎么優(yōu)化了吧?好,我們繼續(xù)往下看!

解決方案

解決問題的思路有了,接下來,我們看看如何使用代碼實(shí)現(xiàn)我們上面分析的解決問題的思路。這里,我們可以分別開啟兩個線程執(zhí)行g(shù)etHasNoOrders()方法和getHasNoStock()方法,在主線程中執(zhí)行checkData()方法和saveCheckResult()方法。這里需要注意的是:主線程需要等待兩個子線程執(zhí)行完畢之后再執(zhí)行checkData()方法和saveCheckResult()方法。 為了實(shí)現(xiàn)這個功能,我們可以使用Thread類中join()方法,有關(guān)Thread類中join()方法的具體說明,這里,具體的邏輯就是在主線程中調(diào)用兩個子線程的join()方法實(shí)現(xiàn)阻塞等待,當(dāng)兩個子線程執(zhí)行完畢退出時,調(diào)用兩個子線程join()方法的主線程會被喚醒,從而執(zhí)行主線程中的checkData()方法和saveCheckResult()方法。大體代碼如下所示。

  1. //檢測是否存在未對賬訂單 
  2. checkOrders = checkOrders(); 
  3. while(checkOrders != null){ 
  4.     Thread t1 = new Thread(()->{ 
  5.         //查詢未校對的訂單信息 
  6.         hasNoOrders = getHasNoOrders(); 
  7.     }); 
  8.     t1.start(); 
  9.     Thread t2 = new Thread(()->{ 
  10.        //查詢未校對的庫存記錄 
  11.        hasNoStock = getHasNoStock(); 
  12.     }); 
  13.      t2.start(); 
  14.     //阻塞主線程,等待線程t1和線程t2執(zhí)行完畢 
  15.     t1.join(); 
  16.     t2.join(); 
  17.     //校對數(shù)據(jù)并返回結(jié)果 
  18.     checkResult = checkData(hasNoOrders, hasNoStock); 
  19.     //將結(jié)果信息保存到數(shù)據(jù)校對信息表中 
  20.     saveCheckResult(checkResult); 
  21.     //檢測是否存在未對賬訂單 
  22.     checkOrders = checkOrders(); 

至此,我們基本上能夠解決問題了。但是,還有沒有進(jìn)一步優(yōu)化的空間呢?我們進(jìn)一步往下看。

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

通過上面對系統(tǒng)優(yōu)化,基本能夠達(dá)成我們的優(yōu)化目標(biāo),但是上面的解決方案存在著不足的地方,那就是在while循環(huán)里每次都要新建兩個線程分別執(zhí)行g(shù)etHasNoOrders()方法和getHasNoStock()方法,了解Java多線程的小伙伴們應(yīng)該都知道,在Java中創(chuàng)建線程可是個非常耗時的操作。所以,最好是能夠?qū)?chuàng)建出來的線程反復(fù)使用。這里,估計(jì)很多小伙伴都會想到使用線程池,沒錯,我們可以使用線程池進(jìn)一步優(yōu)化上面的代碼。

遇到新的問題

不過在使用線程池進(jìn)一步優(yōu)化時,我們會遇到一個問題,就是主線程如何等待子線程中的結(jié)果數(shù)據(jù)呢?說直白點(diǎn)就是:主線程如何知道子線程中的getHasNoOrders()方法和getHasNoStock()方法執(zhí)行完了? 由于在之前的代碼中我們是在主線程中調(diào)用子線程的join()方法等待子線程執(zhí)行完畢,獲取到子線程執(zhí)行的結(jié)果后,繼續(xù)執(zhí)行主線程的邏輯。但是如果使用了線程池的話,線程池中的線程根本不會退出,此時,我們無法使用線程的join()方法等待線程執(zhí)行完畢。

所以,主線程如何知道子線程中的getHasNoOrders()方法和getHasNoStock()方法執(zhí)行完了? 這個問題就成了關(guān)鍵的突破點(diǎn)。這里,我們使用線程池進(jìn)一步優(yōu)化的代碼如下所示。

  1. //檢測是否存在未對賬訂單 
  2. checkOrders = checkOrders(); 
  3. //創(chuàng)建線程池 
  4. Executor executor =  Executors.newFixedThreadPool(2); 
  5. while(checkOrders != null){ 
  6.     executor.execute(()->{ 
  7.         //查詢未校對的訂單信息 
  8.         hasNoOrders = getHasNoOrders(); 
  9.     }); 
  10.     executor.execute(()->{ 
  11.        //查詢未校對的庫存記錄 
  12.        hasNoStock = getHasNoStock(); 
  13.     }); 
  14.      
  15.     /**如何知道子線程中的getHasNoOrders()方法和getHasNoStock()方法執(zhí)行完了成為關(guān)鍵**/ 
  16.      
  17.     //校對數(shù)據(jù)并返回結(jié)果 
  18.     checkResult = checkData(hasNoOrders, hasNoStock); 
  19.     //將結(jié)果信息保存到數(shù)據(jù)校對信息表中 
  20.     saveCheckResult(checkResult); 
  21.     //檢測是否存在未對賬訂單 
  22.     checkOrders = checkOrders(); 

那么,如何解決這個問題呢?我們繼續(xù)往下看。

新的解決方案

相信細(xì)心的小伙伴們能夠看出,整個業(yè)務(wù)的場景就是:一個線程需要等待其他兩個線程的邏輯執(zhí)行完畢后再執(zhí)行。在Java的并發(fā)類庫中,為我們提供了一個能夠在這種場景下使用的類庫,那就是CountDownLatch類。

使用CountDownLatch類優(yōu)化我們程序的具體做法就是:在程序的while()循環(huán)中首先創(chuàng)建一個CountDownLatch對象,計(jì)數(shù)器的值初始化為2。分別在hasNoOrders = getHasNoOrders();代碼和hasNoStock = getHasNoStock();代碼的后面調(diào)用latch.countDown()方法使得計(jì)數(shù)器的值分別減1。在主線程中調(diào)用latch.await()方法,等待計(jì)數(shù)器的值變?yōu)?,繼續(xù)往下執(zhí)行。這樣,就能夠完美解決我們遇到的問題了。優(yōu)化后的代碼如下所示。

  1. //檢測是否存在未對賬訂單 
  2. checkOrders = checkOrders(); 
  3. //創(chuàng)建線程池 
  4. Executor executor =  Executors.newFixedThreadPool(2); 
  5. while(checkOrders != null){ 
  6.     CountDownLatch latch = new CountDownLatch(2); 
  7.     executor.execute(()->{ 
  8.         //查詢未校對的訂單信息 
  9.         hasNoOrders = getHasNoOrders(); 
  10.         latch.countDown(); 
  11.     }); 
  12.     executor.execute(()->{ 
  13.        //查詢未校對的庫存記錄 
  14.        hasNoStock = getHasNoStock(); 
  15.        latch.countDown(); 
  16.     }); 
  17.      
  18.     //等待子線程的邏輯執(zhí)行完畢 
  19.     latch.await(); 
  20.   
  21.     //校對數(shù)據(jù)并返回結(jié)果 
  22.     checkResult = checkData(hasNoOrders, hasNoStock); 
  23.     //將結(jié)果信息保存到數(shù)據(jù)校對信息表中 
  24.     saveCheckResult(checkResult); 
  25.     //檢測是否存在未對賬訂單 
  26.     checkOrders = checkOrders(); 

至此,我們就完成了系統(tǒng)的優(yōu)化工作。

總結(jié)與思考

這次系統(tǒng)性能的優(yōu)化,主要是將單線程執(zhí)行的數(shù)據(jù)校對業(yè)務(wù),優(yōu)化成使用多線程執(zhí)行。在平時的工作過程中,我們需要認(rèn)真思考,找到系統(tǒng)性能瓶頸所在,找出在邏輯上不相干,并且沒有先后順序的業(yè)務(wù)邏輯,將其放到不同的線程中執(zhí)行,能夠大大提供系統(tǒng)的性能。

這次,對于系統(tǒng)的優(yōu)化,我們最終使用線程池來執(zhí)行比較耗時的查詢訂單與查詢庫存記錄的操作,并且在主線程中等待線程池中的線程邏輯執(zhí)行完畢后再執(zhí)行主線程的后續(xù)業(yè)務(wù)邏輯。這種場景,使用Java中提供的CountDownLatch類再合適不過了。這里,再強(qiáng)調(diào)一下:CountDownLatch主要的使用場景就是一個線程等待多個線程執(zhí)行完畢后再執(zhí)行。如下圖所示。

這里,也進(jìn)一步提醒了我們:如果想學(xué)好并發(fā)編程,熟練的掌握J(rèn)ava中提供的并發(fā)類庫是我們必須要做到的。

本文轉(zhuǎn)載自微信公眾號「冰河技術(shù)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系冰河技術(shù)公眾號。

 

責(zé)任編輯:武曉燕 來源: 冰河技術(shù)
相關(guān)推薦

2024-10-29 08:21:05

2021-02-02 15:38:19

Disruptor緩存Java

2025-05-27 01:55:00

TypeScript開發(fā)者項(xiàng)目

2022-04-21 07:51:51

場景JavaSQL

2024-07-17 08:25:44

2025-09-25 08:23:18

2020-01-06 15:41:52

AMD IntelCPU

2013-11-13 15:28:31

Windows Ser

2021-07-05 14:55:28

前端優(yōu)化圖片

2019-03-15 15:00:49

Webpack構(gòu)建速度前端

2025-05-29 09:02:27

2024-09-19 08:09:37

MySQL索引數(shù)據(jù)庫

2021-06-21 09:54:24

Windows 11CPU操作系統(tǒng)

2021-09-13 10:25:35

開發(fā)技能代碼

2015-09-16 14:37:50

Android性能優(yōu)化運(yùn)算

2015-09-16 13:54:30

Android性能優(yōu)化渲染

2015-09-16 15:48:55

Android性能優(yōu)化電量

2015-09-16 15:21:23

Android性能優(yōu)化內(nèi)存

2020-06-04 16:57:07

移動開發(fā)互聯(lián)網(wǎng)實(shí)踐

2024-01-03 08:20:05

Java字符串性能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

先锋影音日韩| 国产精品69久久久久| 欧美夫妇交换xxx| 欧美性猛交xxx高清大费中文| 国产日韩精品视频一区| 成人午夜小视频| 99热都是精品| 亚洲成人av网址| 五月天激情综合网| 亚洲精品久久久久| 超碰人人草人人| 98色花堂精品视频在线观看 | 国产91在线亚洲| 天天摸夜夜添狠狠添婷婷| 蜜臀av性久久久久蜜臀aⅴ| 欧美日本高清视频| www.com污| 成人精品一区二区三区校园激情| 精品在线视频一区| 91av在线免费观看| 中文字幕在线有码| 色777狠狠狠综合伊人| 亚洲成色777777女色窝| 最新av免费在线观看| 日韩电影毛片| 亚洲综合一区在线| 在线免费一区| 国产在线播放av| 不卡的av电影| 亚洲自拍av在线| 最新在线中文字幕| 欧美一区=区| 欧美精品video| 三级在线观看免费大全| 成人精品视频| 亚洲无av在线中文字幕| 黄色性生活一级片| 亚洲啊v在线免费视频| 欧美美女一区二区| 国产高清视频网站| 国产一区二区主播在线| 日韩欧美国产成人| 美女日批免费视频| av资源中文在线天堂| 一区二区不卡在线视频 午夜欧美不卡在| 亚州欧美一区三区三区在线| 性xxxx视频| av不卡免费在线观看| 26uuu亚洲伊人春色| 免费在线一区二区三区| 欧美精品入口| 欧美成人国产va精品日本一级| 日本在线观看网址| 精品久久久久久久久久久下田| 国产丝袜视频一区| 亚洲欧美视频在线播放| 欧美美女黄色| 日韩电影中文字幕在线观看| 99久久久无码国产精品性波多| 日韩中文字幕无砖| 日韩精品中文字幕在线不卡尤物 | 日本欧美韩国| 91电影在线观看| 日韩av播放器| 成人在线免费av| 91.麻豆视频| 日韩精品手机在线观看| 超碰porn在线| 亚洲在线观看免费| www.av片| 伊人久久国产| 欧美日韩另类一区| 性生活一级大片| 不卡av播放| 日本乱码高清不卡字幕| 中文字幕视频在线免费观看| 永久免费观看精品视频| 91精品综合久久久久久| 欧美一级片在线免费观看| 成人av三级| 欧美视频你懂的| 超碰在线资源站| 亚洲天堂av资源在线观看| 亚洲国产成人爱av在线播放| 国产精品三级在线观看无码| 欧美一级淫片| 欧美裸体男粗大视频在线观看 | 欧美色道久久88综合亚洲精品| 日韩精品无码一区二区三区免费| 国产成人福利夜色影视| 日韩一级二级三级精品视频| theav精尽人亡av| 日韩精品免费一区二区在线观看| 色综合天天狠天天透天天伊人| 91精品国产乱码在线观看| 日本sm残虐另类| 高清一区二区三区四区五区| 亚洲久久在线观看| 久久99国产精品免费| 国产精品加勒比| 国产黄色在线| 久久久久久夜精品精品免费| av不卡在线免费观看| 在线免费看av| 亚洲综合成人在线| 国产精品视频黄色| 午夜无码国产理论在线| 欧美一区二区黄| 在线不卡av电影| 天天做夜夜做人人爱精品| 最近2019中文字幕mv免费看| 精品人妻在线播放| 男人的天堂亚洲一区| 国产一区二区免费在线观看| 欧美精品hd| 色婷婷久久久久swag精品| 国产精品99久久久精品无码| 欧美一区二区三区激情视频| 午夜欧美大片免费观看| 国产精品久久婷婷| 欧美经典一区二区| 亚洲熟妇av一区二区三区漫画| 日韩一区二区三区色| 国产午夜精品一区理论片飘花| 国产精品成人av久久| 韩国精品在线观看| 亚洲 日韩 国产第一区| 日韩电影av| 日韩高清欧美高清| 久久9999久久免费精品国产| 国产精品夜夜爽| 波多野结衣三级在线| 电影在线观看一区二区| 亚洲欧洲午夜一线一品| 国产综合精品视频| 99精品久久免费看蜜臀剧情介绍| 精品视频在线观看一区二区| 电影一区二区三区久久免费观看| 中文字幕日韩免费视频| 中文字幕免费在线观看视频| 97成人超碰视| 18岁网站在线观看| 麻豆一区二区| 97精品久久久| 污污视频在线观看网站| 亚洲成a人片综合在线| 日韩欧美亚洲在线| 在线免费av资源| 日韩成人在线免费观看| 欧美亚韩一区二区三区| youjizz久久| 亚洲人成无码网站久久99热国产| 中文字幕一区二区三区四区久久 | 精品欧美一区二区三区在线观看 | 熟女少妇一区二区三区| 妖精视频成人观看www| 精品网站在线看| 粉嫩一区二区三区| 伊人伊成久久人综合网小说| 日本黄色激情视频| 免费看黄色91| 四虎影院一区二区| 久久影院一区二区三区| 欧美激情视频给我| 欧美拍拍视频| 欧美三级日韩在线| 国产精品久久久免费看| 国内精品免费在线观看| 日韩 欧美 视频| 日本在线中文字幕一区| 日韩av片电影专区| 69视频在线观看| 欧美一级免费观看| 日韩手机在线观看| 国产天堂亚洲国产碰碰| 一区二区三区波多野结衣在线观看| 日韩一本精品| 色999韩欧美国产综合俺来也| 色爱精品视频一区| 国产精品系列视频| 亚洲成人av中文| 91成人在线免费视频| 激情欧美日韩一区二区| 欧美图片激情小说| 精品亚洲成人| caoporn国产精品免费公开| 亚洲精品一区二区三区四区| 五月激情综合网| 久久久精品成人| 丁香六月综合激情| 国产成人综合一区| 91精品啪在线观看国产18| 国产精品一区在线播放| 91福利精品在线观看| 欧美激情va永久在线播放| 免费在线观看一级毛片| 欧美一级专区免费大片| 日韩久久中文字幕| 亚洲视频中文字幕| 免费黄色在线视频| 国产精品一区二区三区乱码| av免费播放网址| 你懂的成人av| 日本视频精品一区| 超碰在线亚洲| 91精品久久久久久久久不口人| 国产在线精彩视频| 久久成年人免费电影| 黄色片在线免费看| 精品国产乱码久久久久久免费 | 国产精品免费视频一区二区| 在线成人视屏| 欧美一区二区影院| 波多野结依一区| xx视频.9999.com| 无码人妻精品一区二区三区9厂 | 国产日韩欧美精品综合| 色哟哟网站在线观看| 久久精品国产一区二区| 亚洲欧美日韩不卡一区二区三区| 国产精品45p| 91久久精品国产91性色| 亚洲欧美视频一区二区| 日韩电影免费在线观看中文字幕| 99久久精品无免国产免费| 欧洲精品中文字幕| 国产又大又粗又爽| 亚洲国产精华液网站w| 国产精品无码电影| 成人看片黄a免费看在线| 日本成人xxx| 激情综合色播激情啊| 国产精品一区二区小说| 久久久久久久久久久9不雅视频| 欧美精品二区三区四区免费看视频| 我要色综合中文字幕| 91美女片黄在线观看游戏| 日韩成人免费av| 国产在线日韩在线| 激情亚洲小说| 欧美国产乱视频| 超鹏97在线| 久久精品美女视频网站| 日本在线观看| 久久艳片www.17c.com | aaa一区二区| 在线成人午夜影院| 国产女同91疯狂高潮互磨| 欧美精品久久一区| 99热精品在线播放| 欧美一级理论性理论a| 精品国产av一区二区| 欧美刺激脚交jootjob| 精品人妻aV中文字幕乱码色欲| 欧美一区二区久久久| 性欧美一区二区三区| 精品国产免费久久| 日本天堂影院在线视频| 亚洲视频免费一区| 欧美性天天影视| 久久精彩免费视频| 免费在线播放电影| 亚洲天堂第二页| 国产精品视频一区二区久久| 这里只有精品丝袜| 国产欧美久久久久久久久| 欧美精品一区在线播放| av在线资源| 国产成人精品视| 亚洲成人1区| www.成人三级视频| 亚州综合一区| 亚洲一卡二卡三卡四卡无卡网站在线看| 久久国产亚洲| 亚洲色婷婷久久精品av蜜桃| 99伊人成综合| 午夜激情在线观看视频| 国产精品一二三四五| 性欧美丰满熟妇xxxx性久久久| 久久人人爽爽爽人久久久| 成年人看的免费视频| 亚洲综合激情小说| 亚洲天堂一区在线| 欧美猛男超大videosgay| 免费观看黄色av| 在线播放日韩专区| 污污的视频在线观看| 日产精品99久久久久久| 免费看日产一区二区三区| 久久精品中文字幕一区二区三区| 欧美色网址大全| 青草网在线观看| 日韩和欧美一区二区三区| 97国产精东麻豆人妻电影| 免费成人在线影院| 苍井空张开腿实干12次| 欧美国产精品一区二区| 国产在线观看免费av| 91国在线观看| 理论片中文字幕| 日韩中文视频免费在线观看| 9lporm自拍视频区在线| 国产热re99久久6国产精品| 极品尤物一区| 熟女熟妇伦久久影院毛片一区二区| 国产人成精品一区二区三| 欧美一级小视频| 久久久一区二区| 久久综合加勒比| 精品婷婷伊人一区三区三| 瑟瑟在线观看| 久久久久久成人| 婷婷久久免费视频| 日韩理论片在线观看| 99视频精品免费观看| 色哟哟网站在线观看| 亚洲丝袜另类动漫二区| 久久久久久av无码免费看大片| 亚洲成人网久久久| 91精选在线| 国产欧美一区二区三区视频| 国产欧美亚洲精品a| 亚洲日本理论电影| 亚洲自拍另类| 国产草草浮力影院| 亚洲综合一区二区精品导航| 91一区二区视频| 国产一区二区三区视频在线观看| 玖玖在线播放| 国产综合欧美在线看| 精品电影一区| 女性生殖扒开酷刑vk| 亚洲精品久久嫩草网站秘色| 国产一区二区波多野结衣 | 国产精品一区在线观看| 国内在线观看一区二区三区| 四川一级毛毛片| 亚洲少妇屁股交4| 国产美女永久免费| 精品国内亚洲在观看18黄| 欧美天堂在线| 亚洲精品中文字幕乱码三区不卡| 日韩国产精品久久久久久亚洲| 国产精品无码午夜福利| 欧美色播在线播放| 九九在线视频| 国产精品久久久久7777婷婷| 成人在线免费视频观看| 一区二区成人网| 亚洲视频精选在线| 国产黄色av片| 欧美激情一级精品国产| 国产成人在线中文字幕| 成人午夜视频在线观看免费| 成a人片亚洲日本久久| 中文字幕亚洲高清| 亚洲免费精彩视频| 成人全视频在线观看在线播放高清 | 在线观看欧美理论a影院| 白嫩少妇丰满一区二区| 久久精品男人天堂av| 这里只有精品免费视频| 日韩中文字幕不卡视频| 国产成人久久精品一区二区三区| 欧洲金发美女大战黑人| 成人毛片老司机大片| 亚洲欧美综合自拍| 精品国产网站地址| 亚洲成av人片在线观看www| www黄色日本| 国产欧美日本一区视频| 国产精品久久久久毛片| 欧美精品18videos性欧美| 国产成人一区二区三区影院| 五月婷婷丁香色| 亚洲高清在线视频| 免费黄色在线视频网站| 成人精品在线视频| 影音先锋日韩资源| 永久免费看mv网站入口78| 欧美日本在线视频| xxxx另类黑人| 性欧美大战久久久久久久免费观看| 国产真实乱对白精彩久久| 久久久亚洲av波多野结衣| 91福利精品视频| 三级资源在线| 人偷久久久久久久偷女厕| 韩国女主播成人在线观看| 午夜精品三级久久久有码| 日韩中文综合网| 六月丁香久久丫| 一个色综合久久| 精品国产电影一区| 欧美猛烈性xbxbxbxb| 精品视频高清无人区区二区三区| 久久国产精品露脸对白| 精品91久久久| 久久精品久久久久| 精品福利久久久|