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

Java線程池配置的常見誤區(qū)

開發(fā) 后端
在 Java 語言中線程池是也非常重要的一部分,有 Doug Lea 大神對線程池的封裝,我們使用的時(shí)候是非常方便,但也可能會因?yàn)椴涣私馄渚唧w實(shí)現(xiàn),對線程池的配置參數(shù)存在誤解。

[[435054]]

 前言

由于線程的創(chuàng)建和銷毀對操作系統(tǒng)來說都是比較重量級的操作,所以線程的池化在各種語言內(nèi)都有實(shí)踐,當(dāng)然在 Java 語言中線程池是也非常重要的一部分,有 Doug Lea 大神對線程池的封裝,我們使用的時(shí)候是非常方便,但也可能會因?yàn)椴涣私馄渚唧w實(shí)現(xiàn),對線程池的配置參數(shù)存在誤解。

我們經(jīng)常在一些技術(shù)書籍或博客上看到,向線程池提交任務(wù)時(shí),線程池的執(zhí)行邏輯如下:

  •  當(dāng)一個(gè)任務(wù)被提交后,線程池首先檢查正在運(yùn)行的線程數(shù)是否達(dá)到核心線程數(shù),如果未達(dá)到則創(chuàng)建一個(gè)線程。
  •  如果線程池內(nèi)正在運(yùn)行的線程數(shù)已經(jīng)達(dá)到了核心線程數(shù),任務(wù)將會被放到 BlockingQueue 內(nèi)。
  •  如果 BlockingQueue 已滿,線程池將會嘗試將線程數(shù)擴(kuò)充到最大線程池容量。
  •  如果當(dāng)前線程池內(nèi)線程數(shù)量已經(jīng)達(dá)到最大線程池容量,則會執(zhí)行拒絕策略拒絕任務(wù)提交。

流程如圖(摘自美團(tuán)技術(shù)博客):

流程描述沒有問題,但如果某些點(diǎn)未經(jīng)過推敲,容易導(dǎo)致誤解,而且描述中的情境太理想化,如果配置時(shí)不考慮運(yùn)行時(shí)環(huán)境,也會出現(xiàn)一些非常詭異的問題。

核心池

線程池內(nèi)線程數(shù)量小于等于 coreSize 的部分我稱為核心池,核心池是線程池的常駐部分,內(nèi)部的線程一般不會被銷毀,我們提交的任務(wù)也應(yīng)該絕大部分都由核心池內(nèi)的線程來執(zhí)行。

線程創(chuàng)建時(shí)機(jī)的誤解

有關(guān)核心池最常見的一個(gè)誤區(qū)是沒搞清楚核心池內(nèi)線程的創(chuàng)建時(shí)機(jī),這個(gè)問題,我覺得甩 10% 的鍋給 Doug Lea 大神應(yīng)該不算過分,因?yàn)樗谖臋n里寫道 “If fewer than corePoolSize threads are running, try to start a new thread with the given command as its first task”,其中 "running" 這個(gè)詞就比較有歧義,因?yàn)樵谖覀兝斫饫?running 是指當(dāng)前線程已被操作系統(tǒng)調(diào)度,擁有操作系統(tǒng)時(shí)間分片,或者被理解為正在執(zhí)行某個(gè)任務(wù)。

基于以上的理解,我們很容易就認(rèn)為如果任務(wù)的 QPS 非常低,線程池內(nèi)線程數(shù)量永遠(yuǎn)也達(dá)不到 coreSize。即如果我們配置了 coreSize 為 1000,實(shí)際上 QPS 只有 1,單個(gè)任務(wù)耗時(shí) 1s,那么核心池大小就會一直是 1,即使有流量抖動,核心池也只會被擴(kuò)容到 3。因?yàn)橐粋€(gè)線程每秒執(zhí)行執(zhí)行一個(gè)任務(wù),剛好不用創(chuàng)建新線程就足以應(yīng)對 1QPS。

創(chuàng)建過程

但如果簡單設(shè)計(jì)一個(gè)測試,使用 jstack 打印出線程棧并數(shù)一下線程池內(nèi)線程數(shù)量,會發(fā)現(xiàn)線程池內(nèi)的線程數(shù)會隨著任務(wù)的提交而逐漸增大,直到達(dá)到 coreSize。

因?yàn)楹诵某氐脑O(shè)計(jì)初衷是想它能作為常駐池,承載日常流量,所以它應(yīng)該被盡快初始化,于是線程池的邏輯是在沒有達(dá)到 coreSize 之前,每一個(gè)任務(wù)都會創(chuàng)建一個(gè)新的線程,對應(yīng)的源碼為: 

  1. public void execute(Runnable command) {  
  2.     ...  
  3.     int c = ctl.get();  
  4.     if (workerCountOf(c) < corePoolSize) { // workerCountOf() 方法是獲取線程池內(nèi)線程數(shù)量  
  5.         if (addWorker(command, true))  
  6.             return;  
  7.         c = ctl.get();  
  8.     }  
  9.     ...  

而文檔里的 running 狀態(tài)也指的是線程已經(jīng)被創(chuàng)建,我們也知道線程被創(chuàng)建后,會在一個(gè) while 循環(huán)里嘗試從 BlockingQueue 里獲取并執(zhí)行任務(wù),說它正在 running 也不為過。

基于此,我們對一些高并發(fā)服務(wù)進(jìn)行的預(yù)熱,其實(shí)并不是期望 JVM 能對熱點(diǎn)代碼做 JIT 等優(yōu)化,對線程池、連接池和本地緩存的預(yù)熱才是重點(diǎn)。

BlockingQueue

BlockingQueue 是線程池內(nèi)的另一個(gè)重要組件,首先它是線程池”生產(chǎn)者-消費(fèi)者”模型的中間媒介,另外它也可以為大量突發(fā)的流量做緩沖,但理解和配置它也經(jīng)常會出錯(cuò)。

運(yùn)行模型

最常見的錯(cuò)誤是不理解線程池的運(yùn)行模型。首先要明確的一點(diǎn)是線程池并沒有準(zhǔn)確的調(diào)度功能,即它無法感知有哪些線程是處于空閑狀態(tài)的,并把提交的任務(wù)派發(fā)給空閑線程。線程池采用的是”生產(chǎn)者-消費(fèi)者”模式,除了觸發(fā)線程創(chuàng)建的任務(wù)(線程的 firstTask)不會入 BlockingQueue 外,其他任務(wù)都要進(jìn)入到 BlockingQueue,等待線程池內(nèi)的線程消費(fèi),而任務(wù)會被哪個(gè)線程消費(fèi)到完全取決于操作系統(tǒng)的調(diào)度。

對應(yīng)的生產(chǎn)者源碼如下: 

  1. public void execute(Runnable command) {  
  2.     ...  
  3.     if (isRunning(c) && workQueue.offer(command)) { isRunning() 是判斷線程池處理戚狀態(tài)  
  4.         int recheck = ctl.get();  
  5.         if (! isRunning(recheck) && remove(command))  
  6.             reject(command);  
  7.         else if (workerCountOf(recheck) == 0)  
  8.             addWorker(null, false);  
  9.     }  
  10.     ...  

對應(yīng)的消費(fèi)者源碼如下: 

  1. private Runnable getTask() {  
  2.         for (;;) {  
  3.             ...  
  4.             Runnable r = timed ?  
  5.                 workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS) :  
  6.                 workQueue.take();  
  7.             if (r != null)  
  8.                 return r;  
  9.             ...  
  10.         }  
  11.     } 

BlockingQueue 的緩沖作用

基于”生產(chǎn)者-消費(fèi)者”模型,我們可能會認(rèn)為如果配置了足夠的消費(fèi)者,線程池就不會有任何問題。其實(shí)不然,我們還必須考慮并發(fā)量這一因素。

設(shè)想以下情況:有 1000 個(gè)任務(wù)要同時(shí)提交到線程池內(nèi)并發(fā)執(zhí)行,在線程池被初始化完成的情況下,它們都要被放到 BlockingQueue 內(nèi)等待被消費(fèi),在極限情況下,消費(fèi)線程一個(gè)任務(wù)也沒有執(zhí)行完成,那么這 1000 個(gè)請求需要同時(shí)存在于 BlockingQueue 內(nèi),如果配置的 BlockingQueue Size 小于 1000,多余的請求就會被拒絕。

那么這種極限情況發(fā)生的概率有多大呢?答案是非常大,因?yàn)椴僮飨到y(tǒng)對 I/O 線程的調(diào)度優(yōu)先級是非常高的,一般我們的任務(wù)都是由 I/O 的準(zhǔn)備或完成(如 tomcat 受理了 http 請求)開始的,所以很有可能被調(diào)度到的都是 tomcat 線程,它們在一直往線程池內(nèi)提交請求,而消費(fèi)者線程卻調(diào)度不到,導(dǎo)致請求堆積。

我負(fù)責(zé)的服務(wù)就發(fā)生過這種請求被異常拒絕的情況,壓測時(shí) QPS 2000,平均響應(yīng)時(shí)間為 20ms,正常情況下,40 個(gè)線程就可以平衡生產(chǎn)速度,不會堆積。但在 BlockingQueue Size 為 50 時(shí),即使線程池 coreSize 為 1000,還會出現(xiàn)請求被線程池拒絕的情況。

這種情況下,BlockingQueue 的重要的意義就是它是一個(gè)能長時(shí)間存儲任務(wù)的容器,能以很小的代價(jià)為線程池提供緩沖。根據(jù)上文可知,線程池能支持BlockingQueue Size個(gè)任務(wù)同時(shí)提交,我們把最大同時(shí)提交的任務(wù)個(gè)數(shù),稱為并發(fā)量,配置線程池時(shí),了解并發(fā)量異常重要。

并發(fā)量的計(jì)算

我們常用 QPS 來衡量服務(wù)壓力,所以配置線程池參數(shù)時(shí)也經(jīng)常參考這個(gè)值,但有時(shí)候 QPS 和并發(fā)量有時(shí)候相關(guān)性并沒有那么高,QPS 還要搭配任務(wù)執(zhí)行時(shí)間來推算峰值并發(fā)量。

比如請求間隔嚴(yán)格相同的接口,平均 QPS 為 1000,它的并發(fā)量峰值是多少呢?我們并沒有辦法估算,因?yàn)槿绻蝿?wù)執(zhí)行時(shí)間為 1ms,那么它的并發(fā)量只有 1;而如果任務(wù)執(zhí)行時(shí)間為 1s,那么并發(fā)量峰值為 1000。

可是知道了任務(wù)執(zhí)行時(shí)間,就能算出并發(fā)量了嗎?也不能,因?yàn)槿绻埱蟮拈g隔不同,可能 1min 內(nèi)的請求都在一秒內(nèi)發(fā)過來,那這個(gè)并發(fā)量還要乘以 60,所以上面才說知道了 QPS 和任務(wù)執(zhí)行時(shí)間,并發(fā)量也只能靠推算。

計(jì)算并發(fā)量,我一般的經(jīng)驗(yàn)值是 QPS*平均響應(yīng)時(shí)間,再留上一倍的冗余,但如果業(yè)務(wù)重要的話,BlockingQueue Size 設(shè)置大一些也無妨(1000 或以上),畢竟每個(gè)任務(wù)占用的內(nèi)存量很有限。

考慮運(yùn)行時(shí)

GC

除了上面提到的各種情況下,GC 也是一個(gè)很重要的影響因素。

我們都知道 GC 是 Stop the World 的,但這里的 World 指的是 JVM,而一個(gè)請求 I/O 的準(zhǔn)備和完成是操作系統(tǒng)在進(jìn)行的,JVM 停止了,但操作系統(tǒng)還是會正常受理請求,在 JVM 恢復(fù)后執(zhí)行,所以 GC 是會堆積請求的。

上文中提到的并發(fā)量計(jì)算一定要考慮到 GC 時(shí)間內(nèi)堆積的請求同時(shí)被受理的情況,堆積的請求數(shù)可以通過 QPS*GC時(shí)間 來簡單得出,還有一定要記得留出冗余。

業(yè)務(wù)峰值

除此之外,配置線程池參數(shù)時(shí),一定要考慮業(yè)務(wù)場景。

假如接口的流量大部分來自于一個(gè)定時(shí)程序,那么平均 QPS 就沒有了任何意義,線程池設(shè)計(jì)時(shí)就要考慮給 BlockingQueue 的 Size 設(shè)置一個(gè)大一些的值;而如果流量非常不平均,一天內(nèi)只有某一小段時(shí)間才有高流量的話,而且線程資源緊張的情況下,就要考慮給線程池的 maxSize 留下較大的冗余;在流量尖刺明顯而響應(yīng)時(shí)間不那么敏感時(shí),也可以設(shè)置較大的 BlockingQueue,允許任務(wù)進(jìn)行一定程度的堆積。

當(dāng)然除了經(jīng)驗(yàn)和計(jì)算外,對服務(wù)做定時(shí)的壓測無疑更能幫助掌握服務(wù)真實(shí)的情況。

小結(jié)

總結(jié)線程池的配置時(shí),我最大的感受是一定要讀源碼!讀源碼!讀源碼!只看一些書和文章的總結(jié)是無法吃透一些重要概念的,即使搞懂了大部分也很容易會在一些角落踩坑。深入理解原理后,面對復(fù)雜情況,才有靈活配置的能力。 

 

責(zé)任編輯:龐桂玉 來源: Java知音
相關(guān)推薦

2018-04-20 11:19:17

Java誤區(qū)細(xì)節(jié)

2018-04-23 10:28:01

Java誤區(qū)

2018-08-17 08:26:25

2012-05-15 02:18:31

Java線程池

2010-08-12 11:12:27

Flex誤區(qū)

2020-12-26 15:19:00

DevOps誤區(qū)開發(fā)

2012-05-16 09:29:25

JavaRailsJVM

2023-10-24 06:59:17

2021-06-27 17:35:54

DevSecOps網(wǎng)絡(luò)安全數(shù)據(jù)泄露

2020-07-10 17:40:01

人工智能網(wǎng)絡(luò)技術(shù)

2021-09-11 15:26:23

Java多線程線程池

2017-11-20 08:56:54

克服容器誤區(qū)

2018-02-27 11:01:42

2018-04-17 12:35:07

區(qū)塊鏈比特幣數(shù)字貨幣

2022-06-15 15:34:12

數(shù)據(jù)分析分析模型誤區(qū)

2022-05-27 12:40:25

前端測試項(xiàng)目

2014-07-17 09:08:20

Android L

2019-07-01 13:43:14

公共云云計(jì)算云平臺

2015-08-20 09:17:36

Java線程池

2017-11-20 14:18:32

點(diǎn)贊
收藏

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

26uuu亚洲电影| 人妻体体内射精一区二区| 91视频在线视频| 欧洲毛片在线视频免费观看| 欧美一区二视频| 日本中文字幕亚洲| aaa在线观看| 国产成人精品一区二| 日韩免费av片在线观看| 国语对白在线播放| 图片婷婷一区| 91精选在线观看| 国产二区视频在线播放| 99草在线视频| 国产精品毛片| 欧美另类交人妖| 国产中年熟女高潮大集合| 欧美专区视频| 在线观看免费视频综合| 国产真实老熟女无套内射| 99re热久久这里只有精品34| 不卡av电影在线播放| 国产欧美在线观看| 91video| 欧美精品一卡| 日韩一级精品视频在线观看| 99精品人妻少妇一区二区 | 日本福利视频导航| 四虎在线观看| 99视频一区| 伦理中文字幕亚洲| 日本污视频网站| 婷婷综合福利| 亚洲国产精品大全| 日本高清免费观看| 亚洲区欧洲区| 国产精品麻豆久久久| 欧洲一区二区在线观看| 婷婷国产在线| 成人福利视频在线看| www.久久爱.cn| 国产白浆在线观看| 国产综合色精品一区二区三区| 国产精品av网站| 国产视频123区| 亚洲动漫精品| 欧美三级电影网站| 日本女优爱爱视频| 亚洲日本天堂| 日韩毛片精品高清免费| 日本一区二区免费看| 激情小说 在线视频| 久久久久国产精品免费免费搜索| 国产精品三级久久久久久电影| www.国产高清| 国产婷婷精品| 欧美在线视频一区二区| 日韩欧美成人一区二区三区| 午夜亚洲影视| 国产成人jvid在线播放| 中文字幕在线日本| 日本不卡在线视频| 国产精品欧美风情| 国产精品国产三级国产普通话对白 | 成人在线分类| 欧美成人国产一区二区| 性折磨bdsm欧美激情另类| 风间由美中文字幕在线看视频国产欧美| 日韩欧美www| 无码播放一区二区三区| 天堂资源在线| 在线观看亚洲精品视频| 老司机久久精品| 91资源在线观看| 亚洲国产视频一区| 337p粉嫩大胆噜噜噜鲁| 亚洲精品555| 欧美一区二区三区在线视频| 丰满少妇xbxb毛片日本| 久久av资源| 精品国产欧美一区二区五十路| 成人在线电影网站| 网友自拍一区| 日韩中文字幕视频在线| 欧美日韩偷拍视频| 免费视频一区二区三区在线观看| 国产男人精品视频| 亚洲国产精品18久久久久久| 26uuu国产日韩综合| 一区二区三区四区不卡| sm捆绑调教国产免费网站在线观看| 午夜av电影一区| 我看黄色一级片| 2023国产精华国产精品| 亚洲人成电影网站色…| 免费毛片在线播放免费 | 91色国产在线| 亚洲一区电影| 一本色道久久综合狠狠躁篇怎么玩| 美女被艹视频网站| 日韩影视在线观看| 久久韩国免费视频| 久久亚洲天堂网| 国内精品免费在线观看| 欧美大香线蕉线伊人久久国产精品| 在线视频91p| 婷婷综合久久一区二区三区| 亚洲一级片网站| 欧美重口另类| 萌白酱国产一区二区| 免费精品一区二区| 99久久99精品久久久久久| 五月天综合婷婷| **在线精品| 亚洲第一福利一区| 一区二区三区 日韩| 人体久久天天| 久久99精品视频一区97| 91在线公开视频| 中文字幕欧美日本乱码一线二线 | 噜噜噜91成人网| 91免费看蜜桃| 黄网页免费在线观看| 日本韩国视频一区二区| 国产精品伦子伦| 亚洲图片在线| aa日韩免费精品视频一| 日本成人网址| 欧美人妖巨大在线| 亚洲美女性囗交| 视频一区欧美| 日本一区二区在线播放| 亚洲欧洲综合在线| 亚州成人在线电影| 久久久久中文字幕亚洲精品| 99久久精品费精品国产风间由美| 国产精品美女www爽爽爽视频| 神马久久高清| 欧美性xxxxx极品| 在线观看av中文字幕| 日韩视频二区| 久久人人九九| 在线精品亚洲欧美日韩国产| 日韩av网址在线| 久久久久亚洲av无码a片| 亚洲乱亚洲高清| 精品999在线观看| 岛国av免费在线观看| 亚洲第一视频网站| 91国产丝袜播放在线| 91丨九色丨尤物| 青青草原成人网| 亚洲最好看的视频| 国产精品第一视频| 999在线视频| 欧美一区二区三区人| 国产精品国产精品88| 国产成人精品免费在线| 欧美精品尤物在线| 色香欲www7777综合网| 国产一区二区三区在线观看网站| 久久久久久久久久成人| 中文字幕欧美日本乱码一线二线| 中文字幕第100页| 亚洲国产不卡| 国产精品夜夜夜一区二区三区尤| 99爱在线视频| 亚洲美腿欧美激情另类| 破处女黄色一级片| 国产成人精品综合在线观看| 97视频久久久| 欧美久久精品一级c片| 成人有码视频在线播放| 国产亚av手机在线观看| 亚洲精品美女网站| 欧美 亚洲 另类 激情 另类| 亚洲情趣在线观看| 日本护士做爰视频| 日韩va亚洲va欧美va久久| 国产精品久久成人免费观看| 岛国av一区| 国产精品精品久久久久久| av在线看片| 日韩av综合网| 中文字幕在线观看精品| 亚洲一区欧美一区| 俄罗斯毛片基地| 丁香激情综合国产| 国产小视频精品| 伊人天天综合| 一区二区视频在线播放| 国产精品chinese在线观看| 国产精品va在线| 调教一区二区| 这里只有精品丝袜| 男人天堂综合网| 欧美美女一区二区| 欧美 日韩 精品| 亚洲免费av高清| 91在线无精精品白丝| 成人精品国产一区二区4080| www.天天射.com| 一区二区三区导航| 强开小嫩苞一区二区三区网站 | 福利所第一导航| 国产亚洲精久久久久久| 亚洲图片欧美另类| 韩国精品一区二区| 精品久久久久久无码国产| 午夜天堂精品久久久久| 亚洲草草视频| 精品中文一区| 国产精品久久久久久久免费大片 | 久久99亚洲网美利坚合众国| 伊人久久精品视频| 亚洲欧美综合在线观看| 精品福利在线导航| 91片黄在线观看喷潮| 色爱区综合激月婷婷| 国产污片在线观看| 一区二区在线免费观看| 日本高清免费观看| 秋霞电影网一区二区| 动漫av网站免费观看| 亚洲一级影院| 91免费版看片| 欧美精品一卡| 国产内射老熟女aaaa| 91日韩视频| 成人手机视频在线| 色综合天天爱| 亚洲欧洲日韩精品| 日韩精品一卡| 视频一区亚洲| 成人在线免费观看网站| 日韩影视精品| 日韩av片子| 亚洲精品一区二区三区av| 波多野结衣的一区二区三区| 欧洲成人一区二区| 国产精品免费不| 青青草成人激情在线| 欧美久久精品一级c片| 日韩免费三级| 色呦呦免费观看| 欧美伊人久久| 亚洲午夜久久久影院伊人 | 水蜜桃一区二区三区| 亚洲婷婷伊人| 日韩电影免费观看高清完整| 男男gay无套免费视频欧美 | 国产一二三区在线视频| 亚洲欧美国产制服动漫| 国产精品一二三区视频| 在线看欧美日韩| 欧美日韩在线看片| 久久精品久久久久久| av网站网址在线观看| 久久99精品久久久久久琪琪| av福利导福航大全在线| 69视频在线播放| 国产视频网站在线| 亚洲性日韩精品一区二区| 98在线视频| 久久亚洲精品成人| h片精品在线观看| 91av视频在线观看| 国产精品久久久久久久久免费高清 | 日韩成人在线电影网| 黄色小视频在线免费观看| 一区二区在线视频播放| 激情在线小视频| 国产综合在线看| 日韩精品专区| 91色中文字幕| 欧美日韩导航| 偷拍盗摄高潮叫床对白清晰| 欧美日本国产| 国产成人久久婷婷精品流白浆| 免费精品视频在线| 91精品国产高清91久久久久久 | 亚洲不卡1区| 国产精品啊啊啊| 欧美成人精品欧美一级乱| 久久机这里只有精品| 人妻体内射精一区二区三区| 国产蜜臀97一区二区三区| 黄色一级片在线| 欧洲生活片亚洲生活在线观看| 国产精品日韩无码| 亚洲精品在线观看www| 免费在线看黄网站| 26uuu亚洲国产精品| 亚洲高清影院| 久久综合久久综合这里只有精品| 久久在线视频| 国产亚洲欧美在线视频| 老司机免费视频一区二区三区| 中国免费黄色片| 日韩理论片一区二区| 六月丁香激情综合| 欧美一级片在线观看| 高清国产福利在线观看| 久久久视频在线| 天堂久久一区| 日韩av一区二区三区在线观看| 欧美精品一卡| 狠狠干狠狠操视频| 久久毛片高清国产| 国产精品18p| 欧美精品18+| 国产资源在线看| 欧美性视频在线| 深夜激情久久| 资源网第一页久久久| 日韩在线播放一区二区| 粉嫩av懂色av蜜臀av分享| 亚洲激情图片小说视频| 一级黄色片免费看| 亚洲色图50p| 亚洲欧洲高清| 国产一区二区在线观看免费播放| 亚洲五码在线| 7777在线视频| 久久99精品网久久| 9.1成人看片| 亚洲动漫第一页| 亚洲av无码片一区二区三区| 日韩在线视频网| 中文字幕中文字幕在线十八区 | 久久久综合精品| 亚洲色在线视频| 色女人在线视频| 91亚洲精品一区二区| 久久国产电影| xx欧美撒尿嘘撒尿xx| 国产视频一区在线观看 | 五月婷婷视频在线观看| 91久久精品国产| 888久久久| 亚洲日本黄色片| 亚洲色图制服丝袜| 国产欧美久久久精品免费| 日韩一区二区三区国产| 欧美成人家庭影院| 亚洲午夜久久久影院伊人| 久久99精品久久久久久国产越南 | 在线免费av一区| 成人在线观看黄色| 国产精品欧美激情| 国产精品久久占久久| 午夜激情影院在线观看| 亚洲欧美日韩一区二区| 亚洲不卡免费视频| 久久久亚洲天堂| 亚洲bt欧美bt精品777| 欧美一级片中文字幕 | 欧美日韩成人免费观看| 亚洲第一视频在线观看| 欧美激情网站| 日韩av一级大片| 国模娜娜一区二区三区| 免费在线观看亚洲| 亚洲精品一二区| 成人黄色免费观看| av一区二区三区免费观看| 成人高清视频在线观看| 国产一级一级国产| 日韩中文在线不卡| 91精品短视频| 人妻有码中文字幕| 国产精品美女久久久久久久久 | 丁香激情综合五月| 久久久久久久久黄色| 最近日韩中文字幕中文| 亚洲电影一区| 女性隐私黄www网站视频| 一色桃子久久精品亚洲| 免费av网站观看| 国产成人久久久| 欧美精品国产| 在线观看福利片| 日韩欧美另类在线| 韩漫成人漫画| 老司机午夜网站| 久久新电视剧免费观看| 国产精品视频久久久久久| 国内免费久久久久久久久久久| 少妇精品久久久| 男人的天堂免费| 欧美亚洲国产怡红院影院| 欧美24videosex性欧美| 日韩高清dvd| 成人午夜免费视频| 中文字幕人妻一区二区三区视频| 蜜臀久久99精品久久久久久宅男| 午夜精品福利影院| 一级片免费在线观看视频| 一本色道综合亚洲| 污网站在线免费看|