精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

欧美精品一区二区蜜桃| 欧美在线观看视频免费| www.五月婷婷.com| 99精品视频在线观看播放| 欧美精品一二三| 国产日韩亚洲欧美在线| 你懂得在线网址| 精品一区二区三区蜜桃| 欧美国产激情18| 一级片手机在线观看| 亚洲在线资源| 一本到高清视频免费精品| 中国一区二区三区| 午夜视频在线免费播放| 久久久久99| 九九热最新视频//这里只有精品| 亚洲中文字幕一区| 国产精品免费精品自在线观看| 亚洲一区二区精品久久av| 日本亚洲自拍| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 蜜臀av一区二区在线观看| 韩国欧美亚洲国产| 亚洲 欧美 变态 另类 综合| 青青草久久爱| 精品处破学生在线二十三| 久热精品在线播放| 欧美电影免费观看| 精品日韩美女的视频高清| 8x8x华人在线| 日本美女在线中文版| 国产婷婷色一区二区三区 | 久久老司机精品视频| 禁果av一区二区三区| 亚洲成人av中文字幕| 国产农村妇女精品久久| 国产91在线精品| 色噜噜狠狠色综合中国| 久久久久久久中文| sqte在线播放| 亚洲国产精品影院| 国产精品无码免费专区午夜| 黄色精品免费看| 国产精品久久久久久户外露出| 免费观看成人高| 成人免费视频国产| 激情文学综合插| 国产精品吹潮在线观看| 欧美日韩精品一区二区三区视频播放| 国产中文字幕一区二区三区| 日韩av资源在线播放| 99中文字幕在线| 国产精品黄色片| 日韩欧美在线中文字幕| 日韩av中文字幕第一页| 激情成人四房播| 中文字幕欧美激情一区| 欧美中日韩一区二区三区| www.激情五月| 国产中文一区二区三区| 国产精品视频xxxx| 丁香社区五月天| 久久动漫亚洲| 久久久久成人精品| 久久久无码一区二区三区| 婷婷综合亚洲| 久久久黄色av| 性色av无码久久一区二区三区| 日韩欧美电影| xvideos成人免费中文版| 久久婷婷五月综合| 日韩电影一区| 色偷偷亚洲男人天堂| 国产精品1区2区3区4区| 青青草国产免费一区二区下载| 一区二区三区 在线观看视| 欧美丰满少妇人妻精品| 网曝91综合精品门事件在线| 日韩美女av在线| 欧美做受高潮6| 欧美限制电影| 久久精品在线视频| 青春草免费视频| 亚洲性色视频| 午夜精品一区二区三区在线 | 一本岛在线视频| 88xx成人网| 欧美另类高清zo欧美| 美女被艹视频网站| 国产成人夜色高潮福利影视| 日韩av综合网| 91视频免费看片| 午夜片欧美伦| 97碰在线观看| 波多野结衣网站| 精品亚洲成a人| 国产91aaa| 青青草手机在线| 亚洲国产精品二十页| 国产精品夜夜夜爽张柏芝| 亚洲无线看天堂av| 欧美日韩一区二区三区 | 韩国精品在线观看| 国产精品免费在线| 你懂的在线播放| 一区免费观看视频| 阿v天堂2018| 亚洲www啪成人一区二区| 欧美一卡2卡3卡4卡| 无码一区二区精品| 久久视频在线| 欧美激情图片区| 最新中文字幕免费| 极品尤物av久久免费看| 国产一区二区三区av在线| 国产三级电影在线| 一区二区三区美女| 国产成人综合一区| 日韩视频在线直播| 国产亚洲免费的视频看| 校园春色 亚洲| 久久久青草婷婷精品综合日韩| 91日本在线视频| 神马久久久久| 怡红院av一区二区三区| 久久午夜夜伦鲁鲁一区二区| 18国产精品| 色伦专区97中文字幕| 激情综合五月网| 日韩二区在线观看| 国产在线一区二区三区播放| 一区二区高清不卡| 色欧美片视频在线观看在线视频| 中国特级黄色片| 日韩系列欧美系列| 欧美中文字幕视频在线观看| 国产福利视频导航| 欧美国产在线观看| 男人日女人下面视频| 国色天香久久精品国产一区| 一区三区二区视频| 久久久久久久极品| 成人国产在线观看| 中国一级黄色录像| 国产a亚洲精品| 亚洲男人7777| 日本午夜视频在线观看| 国产91丝袜在线18| 视频三区二区一区| 一区一区三区| 国产网站欧美日韩免费精品在线观看| 国产一级二级三级| 国产成人精品亚洲777人妖 | 九九99久久精品在免费线bt| 久久精品国产久精国产思思| 夜夜爽妓女8888视频免费观看| 99久久精品国产导航| 欧美不卡在线播放| 国产精品一区二区中文字幕 | 国产探花视频在线播放| 国产欧美午夜| 久久国产精品免费一区| h片在线观看视频免费| 欧美一级欧美一级在线播放| 蜜桃视频最新网址| 麻豆一区二区三区| 亚洲一区二区三区免费观看| 播放一区二区| 一区二区三区无码高清视频| 中文字幕+乱码+中文字幕明步| 国产欧美日韩另类视频免费观看| 日韩a在线播放| 香蕉久久精品日日躁夜夜躁| 清纯唯美日韩制服另类| 免费在线国产| 色综合久久99| 蜜桃av免费观看| 另类成人小视频在线| 一区二区免费电影| 四虎永久精品在线| 久久97久久97精品免视看| 精品人妻一区二区三区三区四区| 亚洲精品国产视频| 黄页网站在线看| 亚洲狠狠婷婷| 久久综合毛片| 成人国产精品| 久热精品视频在线观看一区| 亚洲黄色在线播放| 精品久久久久久国产91| 在线观看国产网站| 视频一区二区中文字幕| 亚洲伊人婷婷| 中文一区二区三区四区| 国产91对白在线播放| 国产一级二级三级在线观看| 欧美日本免费一区二区三区| 国产精品视频一区二区在线观看| 成人网在线播放| 99久久久无码国产精品6| 欧美中文字幕一区二区| 99re在线| 天天免费亚洲黑人免费| 久久国产一区二区三区| 99国产精品99| 亚洲国产视频直播| 手机看片日韩av| 成人中文字幕电影| 麻豆传传媒久久久爱| 亚洲视频在线免费| 国产精品日韩一区二区免费视频| 久久av日韩| 国内精品久久久久久久久| 高清日韩av电影| 日韩欧美国产一区二区三区| 少妇太紧太爽又黄又硬又爽| 成人免费在线观看入口| free性中国hd国语露脸| 激情五月播播久久久精品| 免费成人午夜视频| 在线看片不卡| 午夜欧美性电影| 自拍偷拍精品| 国产精品久久久久av福利动漫| 日本国产欧美| 国色天香2019中文字幕在线观看| 国产福利在线| 日韩av网址在线观看| av加勒比在线| 欧美日韩免费高清一区色橹橹| 日韩aaaaaa| 日韩码欧中文字| 男人天堂av电影| 99久久精品国产精品久久| 少妇丰满尤物大尺度写真| 青青草成人在线观看| 91好吊色国产欧美日韩在线| 欧美大片一区| 婷婷视频在线播放| 成人看的视频| 日本不卡二区| 婷婷五月色综合香五月| 亚洲一区二区少妇| 美国十次综合久久| 国产日韩欧美在线视频观看| 欧美日韩免费观看视频| 51午夜精品视频| 国产免费拔擦拔擦8x高清在线人| 欧美成人激情视频免费观看| 久久久久久国产精品免费无遮挡| 亚洲色图校园春色| 亚洲av成人无码网天堂| 日韩av在线免播放器| 人妻91麻豆一区二区三区| 日韩欧美的一区| www.成人在线观看| 精品少妇一区二区三区| 国产三级三级在线观看| 欧美日本国产视频| 国产乱色精品成人免费视频| 欧美群妇大交群中文字幕| 亚洲无码精品一区二区三区| 色噜噜狠狠成人中文综合| av片免费观看| 欧美少妇bbb| 一区二区三区午夜| 欧美日韩成人综合天天影院| 国产精品自拍电影| 日韩欧美成人午夜| 好吊色在线观看| 精品国产伦一区二区三区观看方式 | 玩弄japan白嫩少妇hd| 天堂一区二区在线| 久久精品影视大全| 看国产成人h片视频| 91网址在线观看精品| 国产ts人妖一区二区| 亚洲av成人片无码| 久久嫩草精品久久久精品| 人妻熟人中文字幕一区二区| 国产精品久久久久久福利一牛影视| 日本aⅴ在线观看| 午夜精品成人在线视频| 无码人妻久久一区二区三区| 欧美日韩国产综合久久| 精品区在线观看| 日韩电影网在线| 成人高清免费在线播放| 久久久国产视频| 污污的网站在线免费观看| 欧美在线中文字幕| 免费一级欧美在线观看视频| 91网站免费看| 欧美绝顶高潮抽搐喷水合集| 日韩精品一区二区三区色偷偷| 国产精品x453.com| 阿v天堂2018| 日本中文在线一区| 91香蕉国产线在线观看| 99久久精品免费精品国产| 精品熟妇无码av免费久久| 一区二区三区在线观看网站| 91video| 欧美一区二区日韩| 欧美少妇另类| 久久这里只有精品视频首页| 绿色成人影院| 成人网在线免费看| 牛牛视频精品一区二区不卡| 日韩中文字幕av在线| 国产一区二区三区四区老人| av片中文字幕| 国产老肥熟一区二区三区| 欧美成人午夜精品免费| 国产精品毛片高清在线完整版| 在线观看国产亚洲| 欧美精品日日鲁夜夜添| 五月婷婷丁香花| 久久精品青青大伊人av| 亚洲国产成人二区| 成人性生交大片免费观看嘿嘿视频| 精品欧美午夜寂寞影院| 亚洲精品一卡二卡三卡四卡| 欧美成人黑人猛交| 四虎8848精品成人免费网站| 日韩黄色片视频| 国产成人aaaa| 国产wwwwxxxx| 欧美性xxxx| 蜜桃av噜噜一区二区三区麻豆| 中文字幕一区日韩电影| 在线天堂中文资源最新版| 亚洲www视频| 91成人免费| 国产精品v日韩精品v在线观看| 91香蕉视频在线| 久久久久成人片免费观看蜜芽| 欧美乱妇23p| 在线观看h片| 热久久这里只有| 一本色道久久综合狠狠躁的番外| 欧美黄网在线观看| 国产在线看一区| 激情五月激情综合| 在线看日本不卡| 欧洲毛片在线| 97在线视频免费观看| 国产精品久久久网站| 国产在线视频在线| 国产在线精品免费| 男人晚上看的视频| 精品视频免费在线| 国产免费视频在线| 日韩美女视频免费看| 精品一区二区三区中文字幕| 一级黄色片播放| 国产一区激情在线| 久久久久亚洲av片无码| 欧美日本在线播放| 黄色网址在线免费播放| 国产精品免费观看在线| 99久久综合狠狠综合久久aⅴ| 亚洲第一狼人区| 日本一区二区综合亚洲| 男操女视频网站| 中文字幕av一区中文字幕天堂 | 国产普通话bbwbbwbbw| 日韩中文字幕精品| 91成人短视频在线观看| 色乱码一区二区三区熟女| 卡一卡二国产精品| 日本一级片免费| 精品美女被调教视频大全网站| 大桥未久在线播放| 久久久久九九九| 日本欧洲一区二区| 影音先锋男人看片资源| 在线不卡a资源高清| 黄a在线观看| av蓝导航精品导航| 国产精品外国| 中文字幕人妻一区二区三区在线视频| 欧美日韩一级大片网址| 国产在线观看91| 国产精品制服诱惑| 久久久久久一区二区| 欧美日韩国产精品一区二区三区| 中文字幕在线观看精品| 美女扒开尿口让男人操亚洲视频网站| 日韩精品中文字幕一区二区| 无码 制服 丝袜 国产 另类| 久久免费午夜影院| 亚洲影视一区二区| 97国产一区二区精品久久呦| 教室别恋欧美无删减版| 91视频免费入口| 欧美日韩亚洲国产一区 | 日韩精品极品视频免费观看| 国产精品扒开腿做爽爽爽视频软件| 亚洲日本无吗高清不卡|