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

使用線程執(zhí)行框架的一次經(jīng)歷

開發(fā) 架構(gòu)
一個(gè)線程從某個(gè)地方接收消息(數(shù)據(jù)),可以是其他主機(jī)或者消息隊(duì)列,然后轉(zhuǎn)由另外的一個(gè)線程池來執(zhí)行具體處理消息的邏輯,并且消息的處理速度小于接收消息的速度。這種情景很常見,試想一下,你會怎么設(shè)計(jì)和實(shí)現(xiàn)?

場景

一個(gè)線程從某個(gè)地方接收消息(數(shù)據(jù)),可以是其他主機(jī)或者消息隊(duì)列,然后轉(zhuǎn)由另外的一個(gè)線程池來執(zhí)行具體處理消息的邏輯,并且消息的處理速度小于接收消息的速度。這種情景很常見,試想一下,你會怎么設(shè)計(jì)和實(shí)現(xiàn)?

直觀想法

很顯然采用JUC的線程框架,可以迅速寫出代碼。

消息接收者:

 

  1. public class Receiver { 
  2.     private static volatile boolean inited = false
  3.     private static volatile boolean shutdown = false
  4.     private static volatile int cnt = 0
  5.  
  6.     private MessageHandler messageHandler; 
  7.  
  8.     public void start(){ 
  9.         Executors.newSingleThreadExecutor().execute(new Runnable() { 
  10.             @Override 
  11.             public void run() { 
  12.                 while(!shutdown){ 
  13.                     init(); 
  14.                     recv(); 
  15.                 } 
  16.             } 
  17.         }); 
  18.     } 
  19.  
  20.     /** 
  21.      * 模擬消息接收 
  22.      */ 
  23.     public void recv(){ 
  24.             Message msg = new Message("Msg" + System.currentTimeMillis()); System.out.println(String.format("接收到消息(%d): %s", ++cnt, msg)); messageHandler.handle(msg); } public void init(){ if(!inited){ messageHandler = new MessageHandler(); inited = true; } } public static void main(String[] args) { new Receiver().start(); 
  25.     } 

消息處理:

 

  1. public class MessageHandler { 
  2.  
  3.     private static final int THREAD_POOL_SIZE = 4
  4.  
  5.     private ExecutorService service = Executors.newFixedThreadPool(THREAD_POOL_SIZE); 
  6.  
  7.     public void handle(Message msg) { 
  8.         try { 
  9.             service.execute(new Runnable() { 
  10.                 @Override 
  11.                 public void run() { 
  12.                     parseMsg(msg); 
  13.                 } 
  14.             }); 
  15.         } catch (Throwable e) { 
  16.             System.out.println("消息處理異常" + e); } } /** * 比較耗時(shí)的消息處理流程 */ public void parseMsg(Message message) { while (true) { try { System.out.println("解析消息:" + message); Thread.sleep(5000); System.out.println("============================"); } catch (InterruptedException e) { 
  17.                 e.printStackTrace(); 
  18.             } 
  19.  
  20.         } 
  21.     } 

效果:這種方案導(dǎo)致的現(xiàn)象是接收到的消息會迅速堆積,我們從消息隊(duì)列(或者其他地方)取出了大量消息,但是處理線程的速度又跟不上,所以導(dǎo)致的問題是大量的Task會堆積在線程池底層維護(hù)的一個(gè)阻塞隊(duì)列中,這會極大的耗費(fèi)存儲空間,影響系統(tǒng)的性能。

分析:當(dāng)execute()一個(gè)任務(wù)的時(shí)候,如果有空閑的worker線程,那么投入運(yùn)行,否則看設(shè)置的***線程個(gè)數(shù),沒有達(dá)到線程個(gè)數(shù)限制就創(chuàng)建新線程,接新任務(wù),否則就把任務(wù)緩沖到一個(gè)阻塞隊(duì)列中,問題就是這個(gè)隊(duì)列,默認(rèn)的大小是沒有限制的,所以就會大量的堆積任務(wù),必然耗費(fèi)heap空間。

 

  1. public static ExecutorService newFixedThreadPool(int nThreads) { 
  2.         return new ThreadPoolExecutor(nThreads, nThreads, 
  3.                                       0L, TimeUnit.MILLISECONDS, 
  4.                                       new LinkedBlockingQueue<Runnable>()); 
  5.     } 
  6.  
  7. public LinkedBlockingQueue() { 
  8.         this(Integer.MAX_VALUE); // capacity 
  9.     } 

計(jì)數(shù)限制

面對上述問題,想到了要限制消息接收的速度,自然就想到了各種線程同步的原語,不過在這里最簡單的就是使用一個(gè)Volatile的計(jì)數(shù)器。

消息接收者:

 

  1. public class Receiver { 
  2.     private static volatile boolean inited = false
  3.     private static volatile boolean shutdown = false
  4.     private static volatile int cnt = 0
  5.     private MessageHandler messageHandler; 
  6.     public void start(){ 
  7.         Executors.newSingleThreadExecutor().execute(new Runnable() { 
  8.             @Override 
  9.             public void run() { 
  10.                 while(!shutdown){ 
  11.                     init(); 
  12.                     recv(); 
  13.                 } 
  14.             } 
  15.         }); 
  16.     } 
  17.  
  18.     /** 
  19.      * 模擬消息接收 
  20.      */ 
  21.     public void recv(){ 
  22.             Message msg = new Message("Msg" + System.currentTimeMillis()); System.out.println(String.format("接收到消息(%d): %s", ++cnt, msg)); messageHandler.handle(msg); } public void init(){ if(!inited){ messageHandler = new MessageHandler(); inited = true; } } public static void main(String[] args) { new Receiver().start(); 
  23.     } 

消息處理:

 

  1. public class MessageHandler { 
  2.     private static final int THREAD_POOL_SIZE = 1
  3.     private ExecutorService service = Executors.newFixedThreadPool(THREAD_POOL_SIZE); 
  4.  
  5.     public void handle(Message msg){ 
  6.         try { 
  7.             service.execute(new Runnable() { 
  8.  
  9.                 @Override 
  10.                 public void run() { 
  11.                     parseMsg(msg); 
  12.                 } 
  13.             }); 
  14.         } catch (Throwable e) { 
  15.             System.out.println("消息處理異常" + e); } } /** * 比較耗時(shí)的消息處理流程 */ public void parseMsg(Message message){ try { Thread.sleep(10000); System.out.println("解析消息:" + message); } catch (InterruptedException e) { e.printStackTrace(); }finally { 
  16.             Receiver.limit --; 
  17.         } 
  18.  
  19.     } 

效果:通過控制消息的個(gè)數(shù)來阻塞消息的接收過程,就不會導(dǎo)致任務(wù)的堆積,系統(tǒng)的內(nèi)存消耗會比較平緩,限制消息的個(gè)數(shù)本質(zhì)就和下面限制任務(wù)隊(duì)列大小一樣。

使用同步隊(duì)列 SynchronousQueue

SynchronousQueue 雖名為隊(duì)列,但是其實(shí)不會緩沖任務(wù)的對象,只是作為對象傳遞的控制點(diǎn),如果有空閑線程或者沒有達(dá)到***線程限制,就會交付給worker線程去執(zhí)行,否則就會拒絕,我們需要自己實(shí)現(xiàn)對應(yīng)的拒絕策略RejectedExecutionHandler,默認(rèn)的是拋出異常RejectedExecutionException。

消息接收者同上。

消息處理:

 

  1. public class MessageHandler { 
  2.     private static final int THREAD_POOL_SIZE = 4
  3.  
  4.     ThreadPoolExecutor service = new ThreadPoolExecutor(THREAD_POOL_SIZE, THREAD_POOL_SIZE, 0L, TimeUnit.MILLISECONDS, 
  5.             new SynchronousQueue<Runnable>(), new RejectedExecutionHandler() { 
  6.         @Override 
  7.         public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { 
  8.             System.out.println("自定義拒絕策略"); try { executor.getQueue().put(r); System.out.println("重新放任務(wù)回隊(duì)列"); } catch (InterruptedException e) { e.printStackTrace(); } } }); public void handle(Message msg) { try { System.out.println(service.getTaskCount()); System.out.println(service.getQueue().size()); System.out.println(service.getCompletedTaskCount()); service.execute(new Runnable() { @Override public void run() { parseMsg(msg); } }); } catch (Throwable e) { System.out.println("消息處理異常" + e); } } /** * 比較耗時(shí)的消息處理流程 */ public void parseMsg(Message message) { while (true) { try { System.out.println("線程名:" + Thread.currentThread().getName()); System.out.println("解析消息:" + message); Thread.sleep(1000); } catch (InterruptedException e) { 
  9.                 e.printStackTrace(); 
  10.             } 
  11.         } 
  12.     } 

效果:能夠控制消息的接收速度,但是我們需要在rejectedExecution中實(shí)現(xiàn)某種阻塞的操作,但是選擇在發(fā)生拒絕的時(shí)候把任務(wù)重新放回隊(duì)列,帶來的問題就是這個(gè)Task會發(fā)生饑餓現(xiàn)象。

[[178175]]

使用大小限制的阻塞隊(duì)列

使用LinkedBlockingQueue作為線程框架底層的任務(wù)緩沖區(qū),并且設(shè)置大小限制,思想上和上述方案一樣,都是有一個(gè)阻塞的點(diǎn),但是通過***的jvm monitor看到這里的CPU消耗更少,內(nèi)存使用有所降低,并且波動(dòng)小(具體原因有待探索)。

消息接收者同上。

消息處理:

  1. public class MessageHandler { 
  2.     private static final int THREAD_POOL_SIZE = 4
  3.     private static final int BLOCK_QUEUE_CAP = 500
  4.     ThreadPoolExecutor service = new ThreadPoolExecutor(THREAD_POOL_SIZE, THREAD_POOL_SIZE, 0L, TimeUnit.MILLISECONDS, 
  5.             new LinkedBlockingQueue<Runnable>(BLOCK_QUEUE_CAP), new SimpleThreadFactory(), new RejectedExecutionHandler() { 
  6.         @Override 
  7.         public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { 
  8.             System.out.println("自定義拒絕策略"); try { executor.getQueue().put(r); System.out.println("重新放任務(wù)回隊(duì)列"); } catch (InterruptedException e) { e.printStackTrace(); } } }); public void handle(Message msg) { try { service.execute(new Runnable() { @Override public void run() { parseMsg(msg); } }); } catch (Throwable e) { System.out.println("消息處理異常" + e); } } /** * 比較耗時(shí)的消息處理流程 */ public void parseMsg(Message message) { try { Thread.sleep(5000); System.out.println("線程名:" + Thread.currentThread().getName()); System.out.println("解析消息:" + message); } catch (InterruptedException e) { e.printStackTrace(); } } static class SimpleThreadFactory implements ThreadFactory { @Override public Thread newThread(Runnable r) { Thread thread = new Thread(r); thread.setName("Thread-" + System.currentTimeMillis()); return thread; 
  9.         } 
  10.     } 

總結(jié)

多線程是比較容易出問題的地方,特別當(dāng)對方法不熟悉的時(shí)候

 

責(zé)任編輯:張燕妮 來源: Chown
相關(guān)推薦

2012-08-28 09:21:59

Ajax查錯(cuò)經(jīng)歷Web

2025-03-17 10:01:07

2023-03-29 09:36:32

2021-12-06 19:29:17

LRU內(nèi)存算法

2013-04-01 10:27:37

程序員失業(yè)

2011-04-13 09:21:30

死鎖SQL Server

2013-01-17 10:31:13

JavaScriptWeb開發(fā)firebug

2021-04-13 18:17:48

Hbase集群配置

2021-01-22 05:35:19

Lvm模塊Multipath

2014-08-06 11:24:24

Elasticsear劫持掛馬

2012-07-12 14:35:31

面試經(jīng)歷

2018-09-14 10:48:45

Java內(nèi)存泄漏

2022-06-10 11:06:23

服務(wù)下線

2015-04-28 15:31:09

2017-11-09 09:06:29

流量暴增優(yōu)化

2020-11-23 07:13:13

Nodejs源碼

2022-07-13 08:31:18

React問題排查

2018-12-06 16:25:39

數(shù)據(jù)庫服務(wù)器線程池

2020-02-10 10:15:31

技術(shù)研發(fā)指標(biāo)

2019-04-04 15:00:40

SQL索引數(shù)據(jù)庫
點(diǎn)贊
收藏

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

国产一级淫片a| 青青草原播放器| 国产一级片在线播放| 久久人人97超碰国产公开结果| 亚洲一区第一页| 欧美日韩精品区别| 9999在线视频| 国产精品美女久久久久av爽李琼 | 男人添女人下部视频免费| 视频二区在线观看| 蜜臀av性久久久久蜜臀av麻豆| 久久亚洲欧美日韩精品专区| 久久久久麻豆v国产精华液好用吗| 国产极品一区| 亚洲高清中文字幕| 亚洲国产欧美日韩| 日本中文字幕电影在线观看 | 日本视频在线| 99国产麻豆精品| 成人网在线免费看| 成人免费毛片男人用品| 欧美va天堂| 亚洲最大在线视频| 五十路六十路七十路熟婆| 欧美综合影院| 欧美视频在线免费| 黄色网在线视频| 岛国最新视频免费在线观看| 91视频观看视频| 99蜜桃在线观看免费视频网站| 进去里视频在线观看| 日韩视频一区| 欧美激情一区二区三区高清视频| 国产成人在线网址| 欧洲激情视频| 亚洲美女性生活视频| 亚洲一二三四五| 亚洲成人精品综合在线| 一本到三区不卡视频| 草草视频在线免费观看| 超碰人人在线| 亚洲特黄一级片| 亚洲一区二区精品在线| av中文字幕在线| 国产女主播一区| 欧美一区国产一区| 国产福利电影在线| 国产婷婷色一区二区三区| 免费99视频| 日韩精品一二| 久久亚洲综合色一区二区三区 | 国产尤物久久久| 亚洲欧美日本另类| 精品人妻一区二区三区视频| 久久香蕉网站| 亚洲精品电影在线观看| 少妇伦子伦精品无吗| 日韩中文字幕无砖| 日韩亚洲欧美一区二区三区| 成人高清在线观看视频| 亚洲1区在线观看| 日韩视频在线你懂得| 一区二区三区国产好的精华液| 只有精品亚洲| 91精品中文字幕一区二区三区| www.com黄色片| 国产精品第一| 欧美日韩一区不卡| 中文字幕一区二区在线观看视频 | 欧美少妇一区二区三区| 午夜成年人在线免费视频| 亚洲国产视频一区| 久久免费视频3| 无人区在线高清完整免费版 一区二| 色激情天天射综合网| 亚洲成人av免费看| 国产精品亚洲综合在线观看| 精品乱人伦小说| 在线免费播放av| 成人看的羞羞网站| 欧美俄罗斯乱妇| 成人精品免费在线观看| 日本不卡免费在线视频| 91免费的视频在线播放| 成人无码一区二区三区| 91免费视频网| 欧美 日韩 国产 在线观看| av观看在线| 欧美日韩精品在线观看| 色婷婷综合网站| 粉嫩久久久久久久极品| 亚洲色在线视频| 少妇影院在线观看| 久久久久91| 91视频99| 成人在线免费视频| 亚洲午夜在线电影| 成人午夜激情av| 国产精品2023| xvideos亚洲人网站| 色婷婷在线观看视频| 精品一区二区三区在线播放视频| 国产高清不卡av| 免费黄色电影在线观看| 精品国产91久久久| 岛国毛片在线播放| 综合综合综合综合综合网| 久久精品最新地址| 日本精品入口免费视频| 国产99久久久国产精品潘金| 色播亚洲视频在线观看| 黄色软件视频在线观看| 欧美福利电影网| 国产熟女一区二区| 亚洲视频大全| 国产精品jizz视频| 老司机在线永久免费观看| 欧美日韩激情视频8区| 亚洲911精品成人18网站| 欧美wwwww| 国产精品扒开腿做爽爽爽的视频| 好男人在线视频www| 日韩理论片网站| 一区二区三区视频在线观看免费| 日本精品在线观看| 日韩一级裸体免费视频| 天堂免费在线视频| 91视频xxxx| 一女被多男玩喷潮视频| 日韩综合一区二区三区| 美女扒开尿口让男人操亚洲视频网站| 美女黄页在线观看| 国产日韩欧美电影| 国产97色在线 | 日韩| 欧美电影在线观看免费| 久久久久久久久国产| 国产精品久久久久久久一区二区| 中文字幕不卡在线观看| 999在线免费视频| 国产一区二区三区天码| 欧美与黑人午夜性猛交久久久| 黄色三级网站在线观看| 一区二区三区在线免费视频| 天天久久综合网| 亚洲精彩视频| 亚洲va欧美va国产综合久久| 国产精品久久久久久福利| 欧美色区777第一页| 亚洲一区视频在线播放| 日韩成人一区二区三区在线观看| 欧美亚洲另类久久综合| 久久精品女人天堂av免费观看| 亚洲精品在线不卡| 欧美日韩一级黄色片| 国产日韩欧美一区二区三区综合| 亚洲成熟丰满熟妇高潮xxxxx| 精品在线91| 国产精品青青在线观看爽香蕉| 国产在线一二三| 欧美在线一区二区三区| 一级免费黄色录像| 国内一区二区视频| 亚洲国产精品无码观看久久| 日韩a级大片| 国产成人av在线播放| 午夜免费播放观看在线视频| 91精品国产综合久久久久| 精品肉丝脚一区二区三区| 99精品热视频| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 精品国产一区探花在线观看| 国产裸体写真av一区二区 | 亚洲品质自拍视频| 午夜免费福利影院| 天堂一区二区在线| 在线视频91| 精品淫伦v久久水蜜桃| 国产91精品在线播放| 日本视频在线免费观看| 精品国产99国产精品| 一级黄色免费网站| 中文字幕一区二区视频| 精品人妻二区中文字幕| 亚洲欧美日韩视频二区| 亚洲精品中文字幕乱码三区不卡| 亚洲综合色婷婷在线观看| 57pao精品| 1769免费视频在线观看| 日韩av综合中文字幕| 一二三区在线播放| 亚洲国产欧美一区二区三区丁香婷| 日韩人妻一区二区三区 | 日韩少妇一区二区| 蜜桃精品在线观看| 日本在线xxx| 99久久综合狠狠综合久久aⅴ| 成人综合色站| 四虎精品一区二区免费| 91精品国产成人www| 免费在线午夜视频| 国产丝袜一区二区三区| 国产a级免费视频| 一本久久精品一区二区| 久久久久亚洲天堂| 国产精品理论片在线观看| 亚洲AV无码国产精品| 国产在线精品一区二区三区不卡| 日本精品www| 欧美深夜福利| 精品国产无码在线| 激情婷婷综合| 久久精品国产99精品国产亚洲性色| 亚洲男人在线| 国产精品久久77777| 欧美gv在线观看| 欧美福利视频在线观看| 日日夜夜精品一区| 在线a欧美视频| 欧美女子与性| 日韩国产精品一区| 亚洲欧美黄色片| 5566中文字幕一区二区电影| 国产在线观看第一页| 欧美日韩精品中文字幕| 国产精选第一页| 亚洲欧美日韩在线不卡| 2014亚洲天堂| 国产精品视频线看| 日本欧美一区二区三区不卡视频| 91麻豆成人久久精品二区三区| 久久久无码人妻精品无码| 久久99久久99| 日韩成人精品视频在线观看| 蜜臀久久99精品久久久久宅男 | 亚洲免费av网址| 天天操天天干天天操| 日韩久久免费av| www.午夜激情| 欧美一级理论片| 国产成人av免费看| 日韩欧美中文字幕精品| 99精品视频免费看| 日韩三级视频在线看| 99国产揄拍国产精品| 欧美一区二区三区思思人| 国产露脸国语对白在线| 欧美精品v日韩精品v韩国精品v| 一本一道人人妻人人妻αv| 欧美日韩黄色影视| 91精东传媒理伦片在线观看| 69堂国产成人免费视频| 国产伦理吴梦梦伦理| 51午夜精品国产| 国产sm主人调教女m视频| 精品成人佐山爱一区二区| 欧美一级淫片aaaaaa| 日韩av有码在线| 黄色大片在线看| 在线电影av不卡网址| 国产裸舞福利在线视频合集| 在线播放精品一区二区三区 | 亚洲日本一区二区| 欧美日韩精品在线观看视频 | 亚洲精品大片www| 五月天婷婷网站| 色先锋资源久久综合| 中文天堂在线视频| 欧美一区二区人人喊爽| 丁香花免费高清完整在线播放| 亚洲精品理论电影| 中文字幕在线视频区| 欧美理论片在线观看| 电影在线观看一区| 国产裸体写真av一区二区| 日韩中文字幕在线一区| 久久精品人人做人人爽电影| 成人看的羞羞网站| 国产精品久久国产| 天堂va蜜桃一区二区三区漫画版 | 天天天天天天天干| 欧美一区二区高清| 日本天堂在线| 久久久精品亚洲| 在线天堂资源www在线污| 91精品国产综合久久久久久久久| 国产精品一区二区三区美女| 欧美中日韩免费视频| 欧美人成网站| 日本va中文字幕| 成人精品在线视频观看| 中文字幕av久久爽一区| 亚洲成在线观看| 亚洲天堂avav| 日韩精品小视频| 97超碰资源站在线观看| 欧美在线一级视频| 欧美一区一区| 日本亚洲自拍| 在线日韩电影| 欧美一级特黄aaa| 91麻豆福利精品推荐| 欧美日韩中文字幕在线观看| 色综合久久久久综合体| 午夜免费福利视频| www.日韩免费| avav成人| 久久综合色一本| 极品中文字幕一区| 国产精品999.| 国产精品毛片久久久久久久| 久久久久久久黄色片| 欧美一区二区网站| 牛牛澡牛牛爽一区二区| 久久在线视频在线| 国产亚洲人成a在线v网站 | 欧美性xxxxx| 天天操天天干天天操| 久久99国产精品久久久久久久久| 中文字幕系列一区| 免费精品视频一区二区三区| 狠狠爱www人成狠狠爱综合网| 色呦色呦色精品| 国产欧美一区在线| 无码人妻av一区二区三区波多野| 亚洲精品乱码久久久久久按摩观| 牛牛精品视频在线| 91九色在线观看| 91精品久久久久久久久久不卡| 手机在线免费观看毛片| 久久久www免费人成精品| 制服.丝袜.亚洲.中文.综合懂色| 日韩女优av电影在线观看| 国产一二三区在线观看| 91九色国产视频| 93在线视频精品免费观看| 少妇网站在线观看| 日本一区二区三区高清不卡| 国产精品第6页| 中文字幕在线看视频国产欧美在线看完整 | 少妇极品熟妇人妻无码| 亚洲另类在线视频| 99热这里只有精| 久久6免费高清热精品| 亚洲网一区二区三区| 国产日韩第一页| 国产精品伊人色| 国产一级视频在线| 亚洲第一视频网站| 麻豆mv在线观看| 日本精品二区| 另类小说欧美激情| 欧美爱爱免费视频| 精品少妇一区二区三区免费观看| 久操av在线| 久久伊人一区| 日本不卡高清视频| 欧美做爰爽爽爽爽爽爽| 欧美成人一区二区三区| 国产99在线| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 久久在线91| 91禁男男在线观看| 日韩视频中午一区| 涩涩视频网站在线观看| 日韩在线三区| 国产乱人伦偷精品视频免下载| 久久精品视频9| 亚洲精品一区二区久| 粉嫩av一区二区三区四区五区| 中文字幕制服丝袜在线| 国产激情视频一区二区三区欧美 | 亚洲人成电影网站| 欧美高清xxx| 日韩精品一区二区在线视频| 91麻豆产精品久久久久久| 亚洲中文一区二区三区| 欧美激情欧美狂野欧美精品| 亚洲精品国产精品粉嫩| 亚洲三级在线观看视频| 亚洲综合另类小说| 黑人与亚洲人色ⅹvideos| 91久久国产婷婷一区二区| 亚洲国内欧美| 成人免费视频入口| 亚洲精品在线免费观看视频| 日韩高清成人| 免费人成在线观看视频播放| 国产亚洲福利社区一区| 成人av手机在线| 国产成人在线播放| 欧美久色视频| 岛国片在线免费观看| 亚洲成人激情在线观看| 日本黄色一区| 自拍日韩亚洲一区在线| 综合婷婷亚洲小说| 水中色av综合| 99久久99久久| 麻豆一区二区三| 成人精品在线看|