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

多線程到底該設(shè)置多少個線程?

開發(fā) 后端
今天我們就來看看究竟有哪些計算方法可以復(fù)用,線程池中各個參數(shù)之間又存在怎樣的關(guān)系呢? 本文咱們來慢慢聊。

 我們在使用線程池的時候,會有兩個疑問點:

  •  線程池的線程數(shù)量設(shè)置過多會導(dǎo)致線程競爭激烈
  •  如果線程數(shù)量設(shè)置過少的話,還會導(dǎo)致系統(tǒng)無法充分利用計算機資源

那么如何設(shè)置才不會影響系統(tǒng)性能呢?

其實線程池的設(shè)置是有方法的,不是憑借簡單的估算來決定的。今天我們就來看看究竟有哪些計算方法可以復(fù)用,線程池中各個參數(shù)之間又存在怎樣的關(guān)系呢? 本文咱們來慢慢聊。

線程池原理

開始優(yōu)化之前,我們先來看看線程池的實現(xiàn)原理,有助于你更好地理解后面的內(nèi)容。

在 HotSpot VM 的線程模型中,Java 線程被一對一映射為內(nèi)核線程。Java 在使用線程執(zhí)行程序時,需要創(chuàng)建一個內(nèi)核線程;當(dāng)該 Java 線程被終止時,這個內(nèi)核線程也會被回收。因此 Java 線程的創(chuàng)建與銷毀將會消耗一定的計算機資源,從而增加系統(tǒng)的性能開銷。

除此之外,大量創(chuàng)建線程同樣會給系統(tǒng)帶來性能問題,因為內(nèi)存和 CPU 資源都將被線程搶占,如果處理不當(dāng),就會發(fā)生內(nèi)存溢出、CPU 使用率超負荷等問題。

為了解決上述兩類問題,Java 提供了線程池概念,對于頻繁創(chuàng)建線程的業(yè)務(wù)場景,線程池可以創(chuàng)建固定的線程數(shù)量,并且在操作系統(tǒng)底層,輕量級進程將會把這些線程映射到內(nèi)核。

線程池可以提高線程復(fù)用,又可以固定最大線程使用量,防止無限制地創(chuàng)建線程。

當(dāng)程序提交一個任務(wù)需要一個線程時,會去線程池中查找是否有空閑的線程,若有,則直接使用線程池中的線程工作,若沒有,會去判斷當(dāng)前已創(chuàng)建的線程數(shù)量是否超過最大線程數(shù)量,如未超過,則創(chuàng)建新線程,如已超過,則進行排隊等待或者直接拋出異常。

線程池框架 Executor

Java 最開始提供了 ThreadPool 實現(xiàn)了線程池,為了更好地實現(xiàn)用戶級的線程調(diào)度,更有效地幫助開發(fā)人員進行多線程開發(fā),Java 提供了一套 Executor 框架。

這個框架中包括了 ScheduledThreadPoolExecutor 和 ThreadPoolExecutor 兩個核心線程池。前者是用來定時執(zhí)行任務(wù),后者是用來執(zhí)行被提交的任務(wù)。

鑒于這兩個線程池的核心原理是一樣的,下面我們就重點看看 ThreadPoolExecutor 類是如何實現(xiàn)線程池的。

Executors 實現(xiàn)了以下四種類型的 ThreadPoolExecutor:

Executors 利用工廠模式實現(xiàn)的四種線程池,我們在使用的時候需要結(jié)合生產(chǎn)環(huán)境下的實際場景。

不過我不太推薦使用它們,因為選擇使用 Executors 提供的工廠類,將會忽略很多線程池的參數(shù)設(shè)置,工廠類一旦選擇設(shè)置默認參數(shù),就很容易導(dǎo)致無法調(diào)優(yōu)參數(shù)設(shè)置,從而產(chǎn)生性能問題或者資源浪費。

我建議你使用 ThreadPoolExecutor 自我定制一套線程池(阿里規(guī)范中也是建議不要使用Executors 創(chuàng)建線程池,建議使用ThreadPoolExecutor 來創(chuàng)建線程池)。

進入四種工廠類后,我們可以發(fā)現(xiàn)除了 newScheduledThreadPool 類,其它類均使用了 ThreadPoolExecutor 類進行實現(xiàn),

你可以通過以下代碼簡單看下該方法

 

corePoolSize:線程池的核心線程數(shù)量

maximumPoolSize:線程池的最大線程數(shù)

keepAliveTime:當(dāng)線程數(shù)大于核心線程數(shù)時,多余的空閑線程存活的最長時間

unit:時間單位

workQueue:任務(wù)隊列,用來儲存等待執(zhí)行任務(wù)的隊列

threadFactory:線程工廠,用來創(chuàng)建線程,一般默認即可

handler:拒絕策略,當(dāng)提交的任務(wù)過多而不能及時處理時,我們可以定制策略來處理任務(wù)

我們還可以通過下面這張圖來了解下線程池中各個參數(shù)的相互關(guān)系:

通過上圖,我們發(fā)現(xiàn)線程池有兩個線程數(shù)的設(shè)置,一個為核心線程數(shù),一個為最大線程數(shù)。在創(chuàng)建完線程池之后,默認情況下,線程池中并沒有任何線程,等到有任務(wù)來才創(chuàng)建線程去執(zhí)行任務(wù)。

但有一種情況排除在外,就是調(diào)用 prestartAllCoreThreads() 或者 prestartCoreThread() 方法的話,可以提前創(chuàng)建等于核心線程數(shù)的線程數(shù)量,這種方式被稱為預(yù)熱,在搶購系統(tǒng)中就經(jīng)常被用到。

當(dāng)創(chuàng)建的線程數(shù)等于 corePoolSize 時,提交的任務(wù)會被加入到設(shè)置的阻塞隊列中。當(dāng)隊列滿了,會創(chuàng)建線程執(zhí)行任務(wù),直到線程池中的數(shù)量等于 maximumPoolSize。

當(dāng)線程數(shù)量已經(jīng)等于 maximumPoolSize 時, 新提交的任務(wù)無法加入到等待隊列,也無法創(chuàng)建非核心線程直接執(zhí)行,我們又沒有為線程池設(shè)置拒絕策略,這時線程池就會拋出 RejectedExecutionException 異常,即線程池拒絕接受這個任務(wù)。

當(dāng)線程池中創(chuàng)建的線程數(shù)量超過設(shè)置的 corePoolSize,在某些線程處理完任務(wù)后,如果等待 keepAliveTime 時間后仍然沒有新的任務(wù)分配給它,那么這個線程將會被回收。線程池回收線程時,會對所謂的“核心線程”和“非核心線程”一視同仁,直到線程池中線程的數(shù)量等于設(shè)置的 corePoolSize 參數(shù),回收過程才會停止。

即使是 corePoolSize 線程,在一些非核心業(yè)務(wù)的線程池中,如果長時間地占用線程數(shù)量,也可能會影響到核心業(yè)務(wù)的線程池,這個時候就需要把沒有分配任務(wù)的線程回收掉。

我們可以通過 allowCoreThreadTimeOut 設(shè)置項要求線程池:將包括“核心線程”在內(nèi)的,沒有任務(wù)分配的所有線程,在等待 keepAliveTime 時間后全部回收掉。

我們可以通過下面這張圖來了解下線程池的線程分配流程:

計算線程數(shù)量

了解完線程池的實現(xiàn)原理和框架,我們就可以動手實踐優(yōu)化線程池的設(shè)置了。

我們知道,環(huán)境具有多變性,設(shè)置一個絕對精準(zhǔn)的線程數(shù)其實是不大可能的,但我們可以通過一些實際操作因素來計算出一個合理的線程數(shù),避免由于線程池設(shè)置不合理而導(dǎo)致的性能問題。下面我們就來看看具體的計算方法。

一般多線程執(zhí)行的任務(wù)類型可以分為 CPU 密集型和 I/O 密集型,根據(jù)不同的任務(wù)類型,我們計算線程數(shù)的方法也不一樣。

CPU 密集型任務(wù)

這種任務(wù)消耗的主要是 CPU 資源,可以將線程數(shù)設(shè)置為 N(CPU 核心數(shù))+1,比 CPU 核心數(shù)多出來的一個線程是為了防止線程偶發(fā)的缺頁中斷,或者其它原因?qū)е碌娜蝿?wù)暫停而帶來的影響。

一旦任務(wù)暫停,CPU 就會處于空閑狀態(tài),而在這種情況下多出來的一個線程就可以充分利用 CPU 的空閑時間。

下面我們用一個例子來驗證下這個方法的可行性,通過觀察 CPU 密集型任務(wù)在不同線程數(shù)下的性能情況就可以得出結(jié)果,你可以點擊Github下載到本地運行測試:  

  1. public class CPUTypeTest implements Runnable {    
  2.     // 整體執(zhí)行時間,包括在隊列中等待的時間     
  3.     List<Long> wholeTimeList;     
  4.     // 真正執(zhí)行時間     
  5.     List<Long> runTimeList;       
  6.     private long initStartTime = 0;     
  7.     /**  
  8.     * 構(gòu)造函數(shù)  
  9.     * @param runTimeList  
  10.     * @param wholeTimeList  
  11.     */  
  12.     public CPUTypeTest(List<Long> runTimeList, List<Long> wholeTimeList) {  
  13.         initStartTime = System.currentTimeMillis();  
  14.         this.runTimeList = runTimeList; 
  15.         this.wholeTimeList = wholeTimeList; 
  16.     }  
  17.     /**  
  18.     * 判斷素數(shù)  
  19.     * @param number 
  20.     * @return  
  21.     */ 
  22.     public boolean isPrime(final int number) { 
  23.         if (number <= 1)  
  24.             return false;  
  25.         for (int i = 2; i <= Math.sqrt(number); i++) {  
  26.             if (number % i == 0)  
  27.                 return false;  
  28.         }  
  29.         return true;  
  30.     }  
  31.     /**  
  32.     * 計算素數(shù)  
  33.     * @param number  
  34.     * @return  
  35.     */ 
  36.     public int countPrimes(final int lower, final int upper) {  
  37.         int total = 0 
  38.         for (int i = lower; i <= upper; i++) {  
  39.             if (isPrime(i))  
  40.                 total++;  
  41.         }  
  42.         return total;  
  43.     }  
  44.     public void run() {  
  45.         long start = System.currentTimeMillis();  
  46.         countPrimes(1, 1000000);  
  47.         long end = System.currentTimeMillis();   
  48.         long wholeTime = end - initStartTime;  
  49.         long runTime = end - start;  
  50.         wholeTimeList.add(wholeTime);  
  51.         runTimeList.add(runTime);  
  52.         System.out.println(" 單個線程花費時間:" + (end - start));  
  53.     }  

測試代碼在 4 核 intel i5 CPU 機器上的運行時間變化如下:

綜上可知:當(dāng)線程數(shù)量太小,同一時間大量請求將被阻塞在線程隊列中排隊等待執(zhí)行線程,此時 CPU 沒有得到充分利用;當(dāng)線程數(shù)量太大,被創(chuàng)建的執(zhí)行線程同時在爭取 CPU 資源,又會導(dǎo)致大量的上下文切換,從而增加線程的執(zhí)行時間,影響了整體執(zhí)行效率。通過測試可知,4~6 個線程數(shù)是最合適的。

I/O 密集型任務(wù)

這種任務(wù)應(yīng)用起來,系統(tǒng)會用大部分的時間來處理 I/O 交互,而線程在處理 I/O 的時間段內(nèi)不會占用 CPU 來處理,這時就可以將 CPU 交出給其它線程使用。因此在 I/O 密集型任務(wù)的應(yīng)用中,我們可以多配置一些線程,具體的計算方法是 2N。

這里我們還是通過一個例子來驗證下這個公式是否可以標(biāo)準(zhǔn)化:  

  1. public class IOTypeTest implements Runnable {     
  2.     // 整體執(zhí)行時間,包括在隊列中等待的時間     
  3.     Vector<Long> wholeTimeList;   
  4.     // 真正執(zhí)行時間     
  5.     Vector<Long> runTimeList;      
  6.     private long initStartTime = 0;   
  7.      /**   
  8.     * 構(gòu)造函數(shù)    
  9.     * @param runTimeList     
  10.     * @param wholeTimeList    
  11.     */    
  12.     public IOTypeTest(Vector<Long> runTimeList, Vector<Long> wholeTimeList) {  
  13.          initStartTime = System.currentTimeMillis();   
  14.         this.runTimeList = runTimeList;   
  15.         this.wholeTimeList = wholeTimeList;   
  16.     }         
  17.     /**   
  18.     *IO 操作    
  19.     * @param number   
  20.     * @return     
  21.     * @throws IOException     
  22.     */    
  23.     public void readAndWrite() throws IOException {   
  24.         File sourceFile = new File("D:/test.txt");    
  25. // 創(chuàng)建輸入流      
  26. BufferedReader input = new BufferedReader(new FileReader(sourceFile));   
  27. // 讀取源文件, 寫入到新的文件     
  28. String line = null;   
  29. while((line = input.readLine()) != null){   
  30. //System.out.println(line);   
  31. }     
  32. // 關(guān)閉輸入輸出流    
  33. input.close();    
  34.     }         
  35.     public void run() {   
  36.         long start = System.currentTimeMillis();    
  37.         try {     
  38.             readAndWrite();   
  39.         } catch (IOException e) {   
  40.             // TODO Auto-generated catch block    
  41.             e.printStackTrace();      
  42.         }     
  43.         long end = System.currentTimeMillis();    
  44.          long wholeTime = end - initStartTime;     
  45.         long runTime = end - start;  
  46.          wholeTimeList.add(wholeTime);   
  47.          runTimeList.add(runTime);     
  48.         System.out.println(" 單個線程花費時間:" + (end - start));     
  49.     }     

備注:由于測試代碼讀取 2MB 大小的文件,涉及到大內(nèi)存,所以在運行之前,我們需要調(diào)整 JVM 的堆內(nèi)存空間:-Xms4g -Xmx4g,避免發(fā)生頻繁的 FullGC,影響測試結(jié)果。

通過測試結(jié)果,我們可以看到每個線程所花費的時間。當(dāng)線程數(shù)量在 8 時,線程平均執(zhí)行時間是最佳的,這個線程數(shù)量和我們的計算公式所得的結(jié)果就差不多。

看完以上兩種情況下的線程計算方法,你可能還想說,在平常的應(yīng)用場景中,我們常常遇不到這兩種極端情況,那么碰上一些常規(guī)的業(yè)務(wù)操作,比如,通過一個線程池實現(xiàn)向用戶定時推送消息的業(yè)務(wù),我們又該如何設(shè)置線程池的數(shù)量呢?

此時我們可以參考以下公式來計算線程數(shù):

WT:線程等待時間

ST:線程時間運行時間

我們可以通過 JDK 自帶的工具 VisualVM 來查看 WT/ST 比例,以下例子是基于運行純 CPU 運算的例子,我們可以看到:  

  1. WT(線程等待時間)= 36788ms [線程運行總時間] - 36788ms[ST(線程時間運行時間)]= 0    
  2. 線程數(shù) =N(CPU 核數(shù))*(1+ 0 [WT(線程等待時間)]/36788ms[ST(線程時間運行時間)])= N(CPU 核數(shù)) 

這跟我們之前通過 CPU 密集型的計算公式 N+1 所得出的結(jié)果差不多。

綜合來看,我們可以根據(jù)自己的業(yè)務(wù)場景,從“N+1”和“2N”兩個公式中選出一個適合的,計算出一個大概的線程數(shù)量,之后通過實際壓測,逐漸往“增大線程數(shù)量”和“減小線程數(shù)量”這兩個方向調(diào)整,然后觀察整體的處理時間變化,最終確定一個具體的線程數(shù)量。

總結(jié)

本文我們主要學(xué)習(xí)了線程池的實現(xiàn)原理,Java 線程的創(chuàng)建和消耗會給系統(tǒng)帶來性能開銷,因此 Java 提供了線程池來復(fù)用線程,提高程序的并發(fā)效率。

Java 通過用戶線程與內(nèi)核線程結(jié)合的 1:1 線程模型來實現(xiàn),Java 將線程的調(diào)度和管理設(shè)置在了用戶態(tài),提供了一套 Executor 框架來幫助開發(fā)人員提高效率。Executor 框架不僅包括了線程池的管理,還提供了線程工廠、隊列以及拒絕策略等,可以說 Executor 框架為并發(fā)編程提供了一個完善的架構(gòu)體系。

在不同的業(yè)務(wù)場景以及不同配置的部署機器中,線程池的線程數(shù)量設(shè)置是不一樣的。

其設(shè)置不宜過大,也不宜過小,要根據(jù)具體情況,計算出一個大概的數(shù)值,再通過實際的性能測試,計算出一個合理的線程數(shù)量。

我們要提高線程池的處理能力,一定要先保證一個合理的線程數(shù)量,也就是保證 CPU 處理線程的最大化。在此前提下,我們再增大線程池隊列,通過隊列將來不及處理的線程緩存起來。在設(shè)置緩存隊列時,我們要盡量使用一個有界隊列,以防因隊列過大而導(dǎo)致的內(nèi)存溢出問題 

 

責(zé)任編輯:龐桂玉 來源: Java后端技術(shù)
相關(guān)推薦

2022-03-04 10:17:04

Redis數(shù)據(jù)

2021-03-29 08:47:24

線程面試官線程池

2023-09-04 08:08:59

2020-09-08 10:56:55

Java多線程存儲器

2013-07-15 15:35:06

2009-03-12 10:52:43

Java線程多線程

2025-06-27 10:25:43

2020-11-11 10:10:20

調(diào)用函數(shù)參數(shù)變量

2023-06-25 10:04:50

自動駕駛智能

2024-06-27 08:04:39

2010-01-21 11:27:30

linux多線程機制線程同步

2009-06-29 17:49:47

Java多線程

2021-12-26 18:22:30

Java線程多線程

2019-09-09 09:50:27

設(shè)置Java線程池

2020-11-18 09:48:09

Synchronize多線程Java

2017-01-19 10:24:38

Java多線程問題

2015-12-22 10:39:52

Java多線程問題

2022-03-08 22:21:55

網(wǎng)絡(luò)包隊列網(wǎng)卡

2023-12-07 07:28:25

線程共享資源

2023-06-06 08:17:52

多線程編程Thread類
點贊
收藏

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

成人在线高清视频| 五月婷婷综合在线观看| 一本一道波多野毛片中文在线| 另类天堂av| 亚洲小视频在线| 成人免费视频播放| 中文字幕在线免费不卡| 2020欧美日韩在线视频| 亚洲最大成人网站| 日韩漫画puputoon| 日韩码欧中文字| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 亚洲成人免费视| 精品一区二区国产| 影音先锋国产资源| 欧美日韩国产一区精品一区| 亚洲国产私拍精品国模在线观看| 毛片一区二区三区四区| 国产精品毛片一区二区三区四区| 秋霞成人午夜伦在线观看| 中文字幕亚洲欧美| 精品亚洲一区二区三区在线播放| 国产成人免费电影| 亚洲天堂五月天| 久久久久av| 日韩一区二区在线观看视频播放| 91免费黄视频| 日本最新在线视频| 972aa.com艺术欧美| 国产一区二区在线免费| 日本中文字幕在线免费观看| 热久久天天拍国产| 精品精品国产高清a毛片牛牛| 欧美一级片中文字幕| 在线视频观看国产| 国产亚洲综合色| 成人涩涩网站| 99国产精品一区二区| 欧美色精品天天在线观看视频| 日韩不卡一二区| 韩国中文免费在线视频| 丰满少妇久久久久久久| 大白屁股一区二区视频| 亚洲美女在线观看| 四虎成人在线播放| 天堂久久午夜av| 午夜国产不卡在线观看视频| 亚洲天堂电影网| 五月婷婷综合久久| 国产精品一区专区| 国产欧美日韩精品专区| 一级成人黄色片| 欧美日韩午夜| 久久九九亚洲综合| 亚洲精品天堂网| 久久这里只有精品一区二区| 在线播放中文一区| 国产精品全国免费观看高清| 欧美三级三级三级| 粉嫩av一区二区三区天美传媒| 黄色片视频在线观看| 成人av在线资源网| 99在线视频播放| 国产麻豆一精品一男同| 亚洲国内欧美| 久久久国产影院| 免费91在线观看| 国产不卡一二三区| 亚洲美女av网站| 内射中出日韩无国产剧情| 亚洲欧美va天堂人熟伦| 国产乱码午夜在线视频| 亚洲综合图片区| 国产成人免费高清视频| 黄色在线免费看| 亚洲欧美综合另类在线卡通| 亚洲日本精品国产第一区| caopor在线视频| 尤物99国产成人精品视频 | 亚洲大片精品永久免费| 成人在线视频你懂的| 国模吧视频一区| 国产午夜精品久久久久久免费视| 欧美专区视频| 成年人免费观看视频网站| 欧美成人三区| 自拍偷拍欧美激情| 樱空桃在线播放| 1区2区在线观看| 亚洲综合在线免费观看| 久久亚洲精品无码va白人极品| 超碰97人人射妻| 亚洲国产成人一区二区| 国产91精品露脸国语对白| 成人免费视频网站| 手机福利在线| 国产人久久人人人人爽| 伊人狠狠色丁香综合尤物| 国产婷婷视频在线| 亚洲福利视频导航| 人人干人人视频| 日韩专区视频| 欧美不卡在线视频| av无码av天天av天天爽| 国产伦精品一区二区三区视频| 国产一区二区欧美日韩| 欧美肥妇bbwbbw| 亚洲一级特黄| 国产精品99久久久久久人| 一级做a爱片性色毛片| 国产很黄免费观看久久| 国产欧美日韩一区| www.国产精品.com| 亚洲综合成人网| 狠狠爱免费视频| 亚洲欧洲一二区| 精品国产一区二区三区四区四| 亚洲专区区免费| 国产草草影院ccyycom| 国精产品久拍自产在线网站| 日韩精品久久久| 亚洲视频专区在线| 午夜av一区二区三区| 国产精品亚洲午夜一区二区三区| 欧美日韩一二| 91福利在线免费| 波多野结衣av无码| 日本黄色网址大全| 一本色道久久88亚洲精品综合| 欧美在线观看视频| 日韩av在线精品| 日韩精品中文字| 欧美日韩一区二区三区69堂| 日韩中文字幕| 日韩中文字幕欧美| 五月天婷婷久久| 国产在线一区二区综合免费视频| 欧美人与物videos另类| 免费毛片在线看片免费丝瓜视频| 欧美伊人久久久久久久久影院| 久草免费资源站| 青青草97国产精品麻豆| 97香蕉久久夜色精品国产| 中文字幕视频在线播放| 99国产精品一区| 欧美精品卡一卡二| 经典三级久久| 久久精品国产一区二区三区| 免费av中文字幕| 91网站最新网址| 亚洲综合色网站| 日本丰满大乳奶| 欧美日一区二区三区| 精品亚洲一区二区三区| 亚洲欧美在线观看视频| 国产精品99久久久久久久女警| 日本视频一区二区在线观看| free性护士videos欧美| 精品伦理精品一区| 九九热最新地址| 麻豆精品一二三| 亚洲不卡一卡2卡三卡4卡5卡精品| 蜜臀av在线播放| 精品福利在线看| 欧美高清在线精品一区| 日本美女一区二区| 国产精品久久久久久久免费软件| 亚洲五月综合| 国产成人精品一区二区免费看京| 亚洲码欧美码一区二区三区| 国产一区二区三区四区五区3d | а天堂中文在线官网| 精品人妻一区二区三区含羞草 | 污污的视频在线观看| 国产美女永久免费| 色综合免费视频| 午夜写真片福利电影网| 91福利国产成人精品播放| 中文国产在线观看| 人妻少妇被粗大爽9797pw| 国产精品自产拍在线观| 亚洲免费精彩视频| 91久久免费观看| 天天射成人网| 欧美爱爱视频| 99久久www免费| 一本色道久久综合亚洲aⅴ蜜桃 | 国产精品一区二区中文字幕| 久久久久久欧美| 亚洲精品成人区在线观看| 亚洲一区中文日韩| xxxx黄色片| 免费人成在线不卡| 黄黄视频在线观看| 全国精品免费看| 亲子乱一区二区三区电影 | 欧美偷窥清纯综合图区| 精品久久久999| 成人精品在线播放| 日本韩国一区二区三区| 26uuu成人网| av在线播放不卡| 天堂网在线免费观看| 影音国产精品| 午夜精品区一区二区三| 精品成人18| 国产精品福利小视频| a篇片在线观看网站| 精品日韩在线一区| 在线观看国产一区二区三区| 亚洲一区二区影院| 一级免费黄色录像| 91麻豆国产精品久久| 色婷婷激情视频| 在线精品观看| 国产一区一区三区| 激情婷婷综合| 国产有色视频色综合| 欧洲美女精品免费观看视频| 欧美一区二区三区免费观看| 男同在线观看| 亚洲精品国精品久久99热| 亚洲天堂一二三| 色综合一区二区三区| 99在线视频免费| 91毛片在线观看| 师生出轨h灌满了1v1| 激情综合色播五月| www.欧美日本| 天天操夜夜操国产精品| 日韩欧美视频第二区| 欧美人妖视频| 国产日韩欧美亚洲一区| 国产日韩一区二区在线| 国产a久久精品一区二区三区| 91久久爱成人| 亚洲一区二区av| 国产精品久久综合av爱欲tv| 精精国产xxxx视频在线野外| 久久成人这里只有精品| av在线中文| 亚洲色图校园春色| 色av男人的天堂免费在线| 日韩欧美一区二区在线视频| 日本欧美www| 一本大道久久精品懂色aⅴ| 日韩欧美国产亚洲| 亚洲国产日韩av| 欧美激情国产精品免费| 亚洲视频一区二区在线| 免费观看特级毛片| 国产精品水嫩水嫩| 久久亚洲AV无码专区成人国产| 狠狠色丁香久久婷婷综合丁香| 国产精品99久久久久久久vr | 亚洲视频一二区| 91嫩草丨国产丨精品| 亚洲视频小说图片| 青青草华人在线视频| 国产精品美女视频| 成人精品一二三区| 中文字幕一区二区三区不卡在线| 国产激情av在线| 中文字幕乱码久久午夜不卡 | 91传媒久久久| 亚洲久久成人| 欧美 日韩 国产一区| 国产亚洲在线| 中文字幕无码精品亚洲35| 99国产精品久久久久久久| 黄色免费福利视频| 久久精品道一区二区三区| 国产成人久久777777| 日韩国产精品久久久| 国产午夜大地久久| 天堂成人免费av电影一区| 国产成人av影视| 麻豆中文一区二区| 欧美xxxxxbbbbb| 成人免费三级在线| 色哟哟精品观看| 中文字幕永久在线不卡| www.av视频| 亚洲夂夂婷婷色拍ww47| 日韩少妇高潮抽搐| 色婷婷av一区| 国产又黄又爽视频| 国产精品99一区二区三| 国精产品一区一区三区四川| 欧美大奶一区二区| 中文字幕一区二区三区不卡在线 | 要久久爱电视剧全集完整观看| 久久久com| 国产一区二区三区四区五区| 亚洲欧洲精品一区二区| 一区二区免费不卡在线| 日韩国产一级片| 日韩主播视频在线| 激情在线观看视频| 成人免费的视频| 国产精品美女高潮无套| 亚洲另类春色国产| 在线免费黄色av| 欧美电影一区二区| 污污网站在线免费观看| 在线播放国产一区中文字幕剧情欧美| 波多野结衣三级在线| 九九热精品免费视频| 三妻四妾的电影电视剧在线观看| 欧美高清视频在线观看mv| 亚洲三级免费电影| 97av在线视频| 国产区视频在线播放| 免费永久网站黄欧美| 欧美日韩第二页| 国产成人综合在线| 亚洲色图第四色| 亚欧色一区w666天堂| 这里只有精品6| 亚洲片av在线| av资源网在线播放| 亚洲综合在线中文字幕| av一区二区在线观看| www..com日韩| 国产大陆a不卡| 国产jizz18女人高潮| 色婷婷久久一区二区三区麻豆| 成人毛片在线免费观看| 不卡伊人av在线播放| 电影一区二区| 午夜精品电影在线观看| 美女91精品| 男女黄床上色视频| 欧美日韩精品在线视频| 动漫av一区二区三区| 欧美成年人视频网站| 电影91久久久| 在线观看视频黄色| 麻豆成人综合网| 天堂网av2018| 欧美日本国产视频| 永久av在线| 国产欧美日韩免费| 99久久.com| 亚洲图色中文字幕| 最新欧美精品一区二区三区| 亚洲天堂网在线视频| 最近2019年好看中文字幕视频| 欧美精品总汇| 亚洲高清不卡一区| 紧缚奴在线一区二区三区| 欧美另类videoxo高潮| 欧美精品久久一区| 粗大黑人巨茎大战欧美成人| 91免费综合在线| 欧美日韩国产精品一区二区亚洲| 日本wwwxx| 无码av免费一区二区三区试看| 婷婷伊人综合中文字幕| 欧美伊久线香蕉线新在线| 久久99国产成人小视频| 一区二区xxx| 亚洲三级在线看| 六月丁香色婷婷| 青青精品视频播放| 日韩欧美高清| 日本亚洲一区二区三区| 伊人开心综合网| 五月天久久久久久| 日本成人激情视频| 色婷婷综合网| zjzjzjzjzj亚洲女人| 欧美性精品220| 天天影视久久综合| 懂色av一区二区三区在线播放| 99国产精品| 美国黄色特级片| 日韩视频永久免费| 涩涩av在线| 小说区视频区图片区| 成人av在线播放网址| 天天爱天天做天天爽| 成人97在线观看视频| 婷婷五月色综合香五月| 黄大色黄女片18第一次| 亚洲制服丝袜一区| 国产福利第一视频在线播放| 91精品在线一区| 亚洲资源av| 成年人一级黄色片| 亚洲精品综合久久中文字幕| 欧美xxxx性| 国产乱子伦农村叉叉叉| 国产精品电影一区二区| 免费看av毛片| 国产主播喷水一区二区| 国产精品久久久久久久免费软件 | 丝袜亚洲另类丝袜在线| 九色91porny| 综合激情五月婷婷|