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

張開濤:線程的中斷、超時與降級

開發 開發工具
我們平時遇到的關于熔斷的問題其實是跟線程中斷、超時與降級等有關,因此本文將詳細介紹導致這個問題背后的原因。

最近一位朋友在公眾號留言問一個關于熔斷的問題:使用hystrix進行httpclient超時熔斷錯誤,我是順序操作的(沒有并發),發現hystrix會超時斷開,但是會導致hystrix線程池不斷增多,直到后面因線程池裝不下拒絕?

而該問題跟線程中斷、超時與降級等有關,因此本文將詳細介紹導致這個問題背后的原因。

[[192984]]

當我們在線程中執行如用戶請求任務時,比如HTTP處理線程,最擔心的什么?

  1. 線程數***增長;
  2. 線程執行時間長;
  3. 線程不可中斷。

對于線程數***增長,我們可以通過使用線程池來控制線程數量,控制線程不是***增長的。

對于線程執行時間長,我們應設置合理的超時時間來保障線程執行時間可控,當超時時要么返回給用戶錯誤頁面,要么可以返回降級頁面。

對于線程不可中斷,我們應想辦法將線程設計的可中斷,從而在遇到問題可中斷線程并降級處理。

接下來的部分將主要講解線程中斷。

線程中斷是通過Thread.interrupt()方法來做,一般是在A線程來中斷B線程。

線程中斷

首先我們來看下該方法的一些Javadoc描述:

1. 如果線程被Object的wait()、wait(long)、wait(long, int) 或者

Thread的join()、join(long)、join(long, int)、sleep(long)、sleep(long, int)方法阻塞,執行線程中斷,且拋出InterruptedException,但中斷狀態并清空重置,即Thread. isInterrupted()返回false;

2. 如果線程被java.nio.channels.InterruptibleChannel上的一個I/O操作阻塞,執行線程中斷,且該

InterruptibleChannel將被關閉,拋出java.nio.channels.ClosedByInterruptException,線程中斷狀態會設置,即Thread. isInterrupted()返回true;

3. 如果線程被java.nio.channels.Selector阻塞,執行線程中斷,該Selector#select()方法將立即返回,相當于調用了java.nio.channels.Selector#wakeup(),不會拋出異常,但會設置中斷狀態,即Thread. isInterrupted()返回true;

4. 如果不滿足以上條件的,那么執行線程中斷不會拋出異常,僅設置中斷狀態,即Thread. isInterrupted()返回true。也就是說我們代碼要根據該狀態來決定下一步怎么做。

從如上描述可以看出,如果方法異常描述上有拋出

InterruptedException、ClosedByInterruptException異常的,說明該方法可以中斷,如“public final native void wait(longtimeout) throws InterruptedException”,但是中斷狀態會被會被重置要看其Javadoc描述。其他情況基本都是設置中斷狀態而不會中斷掉操作。

BIO(Blocking I/O)操作不可中斷

如java.net.Socket讀寫網絡I/O時是阻塞的,除了設置超時時間外,還應該考慮讓它可中斷或者盡早中斷。可以參考《你的Java代碼可中斷嗎》。還有如JDBC驅動mysql-connector-java、HttpClient等大部分都是使用BIO,它們也是不可中斷的。

NIO(New I/O)操作可中斷

NIO涉及到兩部分:

java.nio.channels.Selector和java.nio.channels.InterruptibleChannel,它們是可中斷的。如java.nio.channels#SocketChannel實現了InterruptibleChannel,如下方法都是可中斷的,并會拋出ClosedByInterruptException異常:

  • connect(SocketAddress remote)
  • read(ByteBuffer[] dsts, int offset, int length)
  • read(ByteBuffer[] dsts)
  • write(ByteBuffer src)

線程、BIO與中斷

我們使用BIO實現的HttpClient來做個實驗,如下代碼所示:

  1. public class BlockingIOTest { 
  2.   public static void main(String[] args) throws Exception { 
  3.     Thread threadA = new Thread(()-> { 
  4.       try { 
  5.        //該阻塞5s 
  6.       String url = "http://localhost:9090/ajax"
  7.       //HttpClient是BIO,不可中斷 
  8.       HttpResponse response = HttpClientUtils.getHttpClient().execute(new HttpGet(url)); 
  9.       System.out.println("http status code : " + response.getStatusLine().getStatusCode()); 
  10.       //雖然在threadB執行了threadA線程中斷 
  11.       //但是僅僅是設置了中斷狀態為true 
  12.       //并沒有中斷線程A的執行,該線程還是正常的執行完成了 
  13.       System.out.println("threadA is interrupted: " + Thread.currentThread().isInterrupted()); 
  14.      } catch (Exception e) { 
  15.        e.printStackTrace(); 
  16.      } 
  17.     }); 
  18.     Thread threadB = new Thread(()-> { 
  19.       try { 
  20.        Thread.sleep(2000L); 
  21.       //休眠2s后,中斷線程A 
  22.       threadA.interrupt(); 
  23.      } catch (Exception e) { 
  24.      } 
  25.     }); 
  26.     threadA.start(); 
  27.     threadB.start(); 
  28.     Thread.sleep(15000L); 
  29.   } 

如上代碼的輸出結果為:

  1. http status code : 200 
  2. threadA is interrupted: true 

如上代碼的執行流程是這樣的:

  1. 線程A通過BIO實現HttpClient遠程調用http://localhost:9090/ajax獲取數據,而該服務需要5s才能響應;
  2. 線程B在線程A執行2s后進行了中斷處理,但是線程A調用的HttpClient是阻塞且不可中斷的操作,僅僅是設置了線程A的中斷狀態為true,因此其一直等待網絡I/O完成;
  3. 當線程A從遠程獲取到結果后繼續執行,Thread.currentThread().isInterrupted()將輸出true,表示線程A被設置了中斷狀態。

從而需要注意設置了中斷狀態與中斷執行不是一回事。因此對于使用BIO,一定要設置好連接和讀寫的超時時間,另外可以參考《你的Java代碼可中斷嗎》進行可中斷設計。

線程池、Future與中斷

我們往線程池提交一個HttpClient任務,并通過Future來等待執行結果,如下代碼所示:

  1. public class ThreadPoolTest { 
  2.   private static ExecutorService executorService = Executors.newFixedThreadPool(5); 
  3.   public static void main(String[] args) throws Exception { 
  4.    Future<Integer> futureA = executorService.submit((Callable) () -> { 
  5.     //該url會阻塞5s 
  6.    String url = "http://localhost:9090/ajax"
  7.    //HttpClient是BIO,不可中斷 
  8.    HttpResponse response = HttpClientUtils.getHttpClient().execute(new HttpGet(url)); 
  9.    Integer result = response.getStatusLine().getStatusCode(); 
  10.    System.out.println("thread a result : " + result); 
  11.    return response.getStatusLine().getStatusCode(); 
  12.    }); 
  13.    Future<Integer> futureB = executorService.submit((Callable) () -> { 
  14.      //該url會阻塞5s 
  15.     String url = "http://localhost:9090/ajax"
  16.     //HttpClient是BIO,不可中斷 
  17.     HttpResponse response = HttpClientUtils.getHttpClient().execute(new HttpGet(url)); 
  18.     Integer result = response.getStatusLine().getStatusCode(); 
  19.     System.out.println("thread b result : " + result); 
  20.     return result; 
  21.     }); 
  22.     try { 
  23.    Integer resultA = futureA.get(100, TimeUnit.MILLISECONDS); 
  24.    } catch (TimeoutException e) { 
  25.     System.out.println("future a timeout"); 
  26.   } 
  27.   try { 
  28.     Integer resultB = futureB.get(100, TimeUnit.MILLISECONDS); 
  29.   } catch (TimeoutException e) { 
  30.     System.out.println("future b timeout"); 
  31.    } 
  32.   executorService.awaitTermination(10000L, TimeUnit.MILLISECONDS); 
  33.   } 

如上代碼的輸出結果為:

  1. future a timeout 
  2. future b timeout 
  3. thread a result : 200 
  4. thread b result : 200 

如上代碼的執行流程是這樣的:

  1. 主線程往線程池提交了兩個HttpClient阻塞調用任務,該任務響應時間為5s;
  2. 主線程阻塞在兩個帶超時的Future等待上,Future在等待線程池任務執行結束,Future的超時時間設置為100ms,所以很快就超時并返回了,主線程繼續執行,在《億級流量》中我們用到了很多這種方法進行并發獲取數據和降級或熔斷處理;
  3. 線程池中的兩個任務其實并沒有被中斷,還是占用著線程池中的線程,在后臺繼續執行,直到完成。

從如上可以看出,使用Future時只是在主線程解除了阻塞,并沒有連帶把線程池任務取消掉,還是占用著線程并阻塞執行。

之前有位同學在公眾號后臺留言咨詢:

使用hystrix進行httpclient超時熔斷錯誤,我是順序操作的(沒有并發),發現hystrix會超時斷開,但是會導致hystrix線程池不斷增多,直到后面因線程池裝不下拒絕?

看完如上示例,應該能解決該讀者的疑惑。雖然熔斷了,但是線程中的操作并沒有真正的中斷,而是還占著線程資源。

接下來我們可以簡單看下Future其中的一個實現FutureTask:

超時等待方法get(long timeout, TimeUnit unit)偽代碼:

  1. while(true) { 
  2.   if (Thread.interrupted()) {//如果當前線程中斷了,處理現場,并拋出中斷異常 
  3.     //some code 
  4.    throw new InterruptedException(); 
  5.   } 
  6.   //判斷剩余休眠時間 
  7.   nanos = deadline - System.nanoTime(); 
  8.   if (nanos <= 0L) {//如果沒有休眠時間了,則處理線程,并終止執行 
  9.     //some code  
  10.     return state; 
  11.   } 
  12.   //休眠一段時間,內部實現為UNSAFE.park(false, nanos) 
  13.   LockSupport.parkNanos(this, nanos); 

取消方法cancel(boolean mayInterruptIfRunning)偽代碼:

  1. if (mayInterruptIfRunning) {//中斷當前線程 
  2.   Thread t = runner
  3.   if (t != null) 
  4.     t.interrupt(); 
  5. //執行UNSAFE.unpark(thread)喚醒休眠的當前線程 
  6. LockSupport.unpark(t); 

即當我們調用Future#cancel時,是通過喚醒Future所在線程實現,當然實際是比這個要復雜的。

回填結果方法set(V v)偽代碼:

  1. //修改Future狀態為完成 
  2. //保持v的值,從而Future#get能獲取到 
  3. //通過LockSupport.unpark(t)喚醒休眠的線程 

當線程池中的線程執行完成后,是通過Future#set把值設置回Future,從而喚醒休眠的線程,即阻塞在Future#get的等待,然后獲取到該結果。

鎖與中斷

synchronized和ReentrantLock#lock()在獲取鎖的過程中是不可中斷的,假設出現了死鎖將一直僵持在那,無法終止阻塞。但我們可以使用可中斷的

ReentrantLock#lockInterruptibly()方法或者ReentrantLock#tryLock(long timeout, TimeUnit unit)實現可中斷。

總結

在設計高可用系統時,盡量使用線程池,而不是通過每個請求創建一個線程來實現,通過線程池的拒絕策略來優雅的拒絕無法處理的請求。

檢查整個請求鏈路設置合理的超時時間,跟調用方協商合理的SLA、降級限流方案。更長的超時時間意味著出現問題時請求堆積的越多,越可能產生雪崩。

明確知道自己的服務是否可中斷,如果不可中斷,應該使用線程池和Future實現偽可中斷,通過Future配置合理的超時時間,當超時時執行相應的降級策略。也要清楚的知道通過Future只是偽中斷,線程池中的任務還是在后臺執行,當Future超時后進行重試時,會對調用的服務產生更多的請求,從而造成一種DDos,一定要注意相應的處理策略。

池大小、超時時間和中斷沒有***的配置策略,要根據自己的場景來動態調整,在系統遇到高并發或者異常時,我們要保護什么,放棄什么,要有權衡。

【本文是51CTO專欄作者“張開濤”的原創文章,作者微信公眾號:開濤的博客( kaitao-1234567)】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2017-07-02 16:50:21

2017-06-16 15:16:15

2017-04-18 14:49:38

應用層API代碼

2017-05-10 11:40:29

緩存Nginx HTTP

2017-05-01 17:03:01

Java緩存分布式

2017-05-18 16:07:23

回滾數據庫代碼

2017-04-21 08:51:42

API緩存分布式

2017-05-05 10:13:03

應用級緩存緩存代碼

2012-12-13 17:38:48

2012年度IT博客大IT博客大賽博客

2023-07-07 07:44:41

線程中斷LockSuppor

2021-01-11 12:53:28

線程Java管理

2025-07-30 02:33:00

2009-04-23 09:07:03

JAVA終端線程

2025-01-14 10:09:43

硬中斷Linux系統

2009-06-11 16:44:06

超時控制Java線程

2017-11-16 15:45:25

服務降級熔斷

2025-06-24 08:25:00

Java并發編程線程

2022-12-07 10:56:23

線程池監控執行超時

2022-09-26 00:42:43

GuavaJDK動態代理

2025-09-10 04:00:00

點贊
收藏

51CTO技術棧公眾號

欧美成人免费在线视频| 欧美性猛片aaaaaaa做受| 国产无套精品一区二区| 日本黄色中文字幕| 国产精品精品| 亚洲福利在线播放| 日韩福利视频在线| 18网站在线观看| 久久综合九色综合97婷婷| 国产女人18毛片水18精品| 精品无码久久久久| 欧美精选一区二区三区| 欧美一区二区三区免费大片| 国模吧无码一区二区三区| 日本中文字幕在线2020| 99国产精品久久久久| 国产日韩欧美中文在线播放| 日韩欧美大片在线观看| 亚洲久久久久| 国产亚洲视频中文字幕视频| av地址在线观看| 写真福利精品福利在线观看| 亚洲一区二区三区四区在线观看| 亚洲精品美女久久7777777| 天天操天天射天天| 国产麻豆成人传媒免费观看| 国产成人综合精品| 日本三级网站在线观看| 亚洲情侣在线| 日韩在线视频免费观看| 国精产品一区一区三区免费视频| 一区二区免费| 91精品一区二区三区在线观看| av免费中文字幕| 岛国av在线播放| 亚洲综合在线第一页| 中文字幕av导航| 成人福利在线| 国产亚洲福利社区一区| 久久精品aaaaaa毛片| www.桃色av嫩草.com| 国产一区二区福利| 成人疯狂猛交xxx| 在线亚洲欧美日韩| 麻豆精品一区二区三区| 国产精彩精品视频| 久操视频在线免费观看| 免费中文字幕日韩欧美| 欧美一级片久久久久久久| 久久久美女视频| 欧美日韩 国产精品| 久久综合免费视频影院| 亚洲 欧美 变态 另类 综合| 久久99精品久久久久久园产越南| 亚洲成人久久网| 日本道中文字幕| jizz国产精品| 亚洲国模精品一区| 免费成人深夜夜行p站| 青青久久av| 亚洲精品日韩久久久| 欧洲一级黄色片| 亚洲资源网站| 一区二区三区视频免费| 国产黄色片在线| 天天做综合网| 欧美大片在线免费观看| 久久婷婷综合国产| 亚洲欧美日本视频在线观看| 日韩美女av在线免费观看| 欧美人一级淫片a免费播放| 蜜臀a∨国产成人精品| 国产日韩在线免费| 精品人妻无码一区二区| av亚洲精华国产精华| 欧美大香线蕉线伊人久久国产精品| 视频二区在线| 中文字幕欧美日本乱码一线二线| 中文字幕欧美人与畜| av在线播放观看| 午夜一区二区三区在线观看| 粉嫩虎白女毛片人体| japansex久久高清精品| 亚洲大胆人体在线| 久久亚洲AV无码专区成人国产| 欧美gvvideo网站| 欧美人与性动交| av大片在线免费观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 3d动漫精品啪啪一区二区三区免费| 成人午夜精品福利免费| 国产亚洲综合在线| 999久久欧美人妻一区二区| av电影院在线看| 在线免费观看成人短视频| 青娱乐国产精品视频| 欧美电影在线观看免费| 日韩在线视频导航| 制服.丝袜.亚洲.中文.综合懂色| 蜜桃视频免费观看一区| 国产精品区一区二区三在线播放| 国产综合视频一区二区三区免费| 1区2区3区欧美| 欧美亚洲国产成人| 国产精品一区二区美女视频免费看| 欧美精品一区二区三区在线| 1024手机在线观看你懂的| 激情婷婷欧美| 成人性生交大片免费看小说 | 一级在线观看视频| 综合久久精品| 国产精品美女免费| 手机在线不卡av| 亚洲久草在线视频| 91制片厂毛片| 天堂日韩电影| 久久久免费在线观看| 在线观看国产小视频| 26uuu久久天堂性欧美| 五月天男人天堂| 美女网站视频一区| 日韩精品免费视频| 国产在线视频在线观看| 激情欧美日韩一区二区| 日韩av一级大片| 深夜成人在线| 亚洲国产成人久久| 久操视频免费在线观看| 精品在线观看视频| 午夜精品一区二区在线观看| 在线观看特色大片免费视频| 精品免费一区二区三区| 三级影片在线看| 久久精品国产精品亚洲综合| 日本一区视频在线播放| 周于希免费高清在线观看| 亚洲福利视频二区| 国产真实乱人偷精品视频| 国产最新精品免费| 青春草在线视频免费观看| 成人黄色毛片| 国产一区二区av| 超碰在线观看91| 国产区在线观看成人精品| 国产免费人做人爱午夜视频| 亚洲人成网www| 欧美中文字幕在线| 日本在线一二三| 一本大道久久a久久综合婷婷| 女尊高h男高潮呻吟| 香蕉成人久久| 欧美日韩国产不卡在线看| 精品91久久| 永久免费看mv网站入口亚洲| 婷婷激情五月综合| 国产精品五月天| 日韩av在线中文| 91精品啪在线观看国产18| 亚洲专区国产精品| 欧美午夜大胆人体| 亚洲精品国精品久久99热一| 在线观看亚洲欧美| 久久精品夜色噜噜亚洲a∨| 黄色一级二级三级| 欧美成人激情| 97视频资源在线观看| gogo久久| 亚洲欧美日韩天堂| 亚洲图片在线播放| 亚洲综合色噜噜狠狠| 国产制服丝袜在线| 美女一区二区三区在线观看| 国产精品99久久久久久大便| 高潮久久久久久久久久久久久久| 91大神福利视频在线| www.亚洲视频| 欧美一二三在线| 国产成人无码精品| 国产精品视频线看| 年下总裁被打光屁股sp| 香蕉成人久久| 欧美日韩一区二区三区电影| 黄色欧美在线| 国产精品视频资源| 在线观看wwwxxxx| 亚洲人成毛片在线播放| 国产免费福利视频| 欧美午夜精品久久久久久人妖| 夜夜春很很躁夜夜躁| 国产精品系列在线观看| 丰满少妇被猛烈进入高清播放| 日韩影院二区| 国产一区二区三区黄| 播放一区二区| 欧美精品videosex极品1| 五月婷婷丁香花| 欧美精品高清视频| 国产免费观看av| 亚洲精品久久久蜜桃| 精品人妻无码一区二区三区| 国产一区二区美女诱惑| 成年人免费大片| 国产精品激情电影| 亚洲 国产 欧美一区| 欧美爱爱网站| 91亚洲精品久久久| 97成人超碰| 欧美最猛性xxxxx(亚洲精品)| 成人免费视屏| 中文字幕在线成人| 日本护士...精品国| 日韩精品一区二区三区在线播放 | 视频一区二区中文字幕| 天天做天天躁天天躁| 97精品视频| 欧美精品一区在线发布| 国产成人一二| 97久久人人超碰caoprom欧美| 全球最大av网站久久| 57pao成人永久免费视频| 七七久久电影网| 伦理中文字幕亚洲| 在线观看av的网站| 亚洲性夜色噜噜噜7777| 亚州av在线播放| 精品国产网站在线观看| 国产视频一区二区三区四区五区| 欧美午夜不卡在线观看免费| 青青青国产在线| 亚洲成va人在线观看| 久久久久亚洲av成人片| 亚洲黄色尤物视频| 老熟妇高潮一区二区三区| 国产精品素人一区二区| 蜜桃久久精品成人无码av| 91网址在线看| 波多野结衣视频播放| proumb性欧美在线观看| 人妻互换一二三区激情视频| 国产精品香蕉一区二区三区| 亚洲欧美激情一区二区三区| 狠狠色丁香九九婷婷综合五月| 国产主播中文字幕| 日韩av电影免费观看高清完整版| 亚洲欧美另类动漫| 日本成人在线视频网站| 久久撸在线视频| 美女任你摸久久| 手机免费av片| 国产一区二区在线电影| 一级黄色高清视频| 国产伦精品一区二区三区在线观看| 国内自拍第二页| 国产精品综合二区| 天堂va欧美va亚洲va老司机| 成人自拍视频在线| 国产精品伦子伦| 久久婷婷国产综合国色天香| 欧美做受xxxxxⅹ性视频| 国产日韩亚洲欧美综合| 999福利视频| 伊人婷婷欧美激情| 日本一级淫片色费放| 欧美日韩久久久久| 中文字幕免费视频观看| 欧美男男青年gay1069videost | 日韩成人一区二区三区| 色婷婷综合久久久中文字幕| 波多野结衣在线观看一区| 欧美男男青年gay1069videost| www.狠狠干| 精品一区二区三区四区| 91网页在线观看| 九九久久国产精品| 中国字幕a在线看韩国电影| 国产精品96久久久久久| 国产一区2区在线观看| 国产一区二区不卡视频| 菠萝蜜一区二区| 99久久99久久精品| 久久亚洲不卡| 26uuu国产| 久久久精品tv| 青娱乐av在线| 在线视频一区二区三| 国产精品伊人久久 | 91在线播放网站| 欧美福利小视频| 国产电影一区二区三区爱妃记| 亚洲最大的免费| 亚欧日韩另类中文欧美| 自拍偷拍视频在线| 国产精品亚洲产品| 天美一区二区三区| 久久久噜噜噜久久中文字幕色伊伊| 亚洲天堂一级片| 色狠狠桃花综合| 不卡av中文字幕| 一夜七次郎国产精品亚洲| 日本乱理伦在线| 国产综合久久久久| 亚洲伊人春色| 亚洲人成无码网站久久99热国产| 捆绑变态av一区二区三区| bl动漫在线观看| 一区二区三区日韩精品| 中文字幕激情视频| 亚洲国产精品电影| 国产黄色在线网站| 国产精品久久久亚洲| 久久影院资源站| 亚洲一区 在线播放| 美女视频一区在线观看| 强伦人妻一区二区三区| 亚洲一区二区三区影院| 99精品在线视频观看| 中文字幕国产精品久久| 这里有精品可以观看| 国产一区二区高清不卡| 欧美日本一区| 欧美体内she精高潮| 国产精品福利一区| 国产精品露脸视频| 亚洲欧美中文日韩在线v日本| 波多一区二区| 99久久国产免费免费| 888久久久| 欧洲美女亚洲激情| 中文字幕亚洲电影| 在线免费观看一级片| 中文精品99久久国产香蕉| 欧美日韩五码| 日本午夜精品一区二区三区| 亚洲免费婷婷| www.久久国产| 欧美日韩精品中文字幕| 三级做a全过程在线观看| 韩国三级电影久久久久久| 亚洲精品一二三**| 奇米777四色影视在线看| 国产精品一区在线观看你懂的| 91免费公开视频| 91精品国产手机| 最新国产在线拍揄自揄视频| 91视频婷婷| 激情欧美亚洲| 亚洲精品中文字幕在线播放| 欧美视频在线免费| 国产在线黄色| 国产精品久久久久影院日本| 色中色综合网| 色婷婷综合在线观看| 亚洲免费在线看| 欧美一区二区在线观看视频| 久久久免费精品视频| 亚洲区小说区| 麻豆一区二区三区视频| 国产精品的网站| 国产黄色片免费观看| 欧美国产在线电影| 日本午夜精品| 国产福利影院在线观看| 亚洲欧洲精品一区二区精品久久久| 国产精品国产一区二区三区四区 | 伊人久久大香| 久久久天堂国产精品| 播五月开心婷婷综合| 好吊色在线视频| 色噜噜国产精品视频一区二区| 最新亚洲国产| 黄色一级在线视频| 久久久久久久久久久久久女国产乱| 日本三级一区二区三区| 另类图片亚洲另类| 天堂俺去俺来也www久久婷婷| 欧美伦理片在线看| 亚洲欧洲制服丝袜| 少妇又色又爽又黄的视频| 国产精品扒开腿做爽爽爽视频| 国产精品久久久久久久久妇女| 亚洲少妇中文字幕| 色婷婷综合在线| 综合图区亚洲| 欧美一区二区三区四区夜夜大片| 精品综合久久久久久8888| 日韩精品一区二区三| 最近2019年好看中文字幕视频| 一区二区在线视频观看| 999精品视频在线| 亚洲制服丝袜av| 国产露出视频在线观看| 91国产在线免费观看| 久久一区欧美| 久久久无码精品亚洲国产| 国产亚洲精品久久久优势 | 茄子视频成人在线观看| 国产乱码精品一区二区三区五月婷 | 国产成人精品视频| 亚洲欧美伊人| 国产又粗又硬视频|