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

聊聊java高并發系統之異步非阻塞

開發 開發工具
在Java中,如使用Tomcat,一個請求會分配一個線程進行請求處理,該線程負責獲取數據、拼裝數據或模板然后返回給前端;在同步調用獲取數據接口的情況下(等待依賴系統返回數據),整個線程是一直被占用并阻塞的。

[[177170]]

在做電商系統時,流量入口如首頁、活動頁、商品詳情頁等系統承載了網站的大部分流量,而這些系統的主要職責包括聚合數據拼裝模板、熱點統計、緩存、下游功能降級開關、托底數據等等。其中聚合數據需要調用其它多個系統服務獲取數據、拼裝數據/模板然后返回給前端,聚合數據來源主要有依賴系統/服務、緩存、數據庫等;而系統之間的調用可以通過如http接口調用(如HttpClient)、SOA服務調用(如dubbo、thrift)等等。

在Java中,如使用Tomcat,一個請求會分配一個線程進行請求處理,該線程負責獲取數據、拼裝數據或模板然后返回給前端;在同步調用獲取數據接口的情況下(等待依賴系統返回數據),整個線程是一直被占用并阻塞的。如果有大量的這種請求,每個請求占用一個線程,但線程一直處于阻塞,降低了系統的吞吐量,這將導致應用的吞吐量下降;我們希望在調用依賴的服務響應比較慢,此時應該讓出線程和CPU來處理下一個請求,當依賴的服務返回了再分配相應的線程來繼續處理。而這應該有更好的解決方案:異步/協程。而Java是不支持協程的(雖然有些Java框架說支持,但還是高層API的封裝),因此在Java中我們還可以使用異步來提升吞吐量。目前java一些開源框架(HttpClient\HttpAsyncClient、dubbo、thrift等等)大部分都支持。

幾種調用方式

同步阻塞調用

即串行調用,響應時間為所有服務的響應時間總和;

半異步(異步Future)

線程池,異步Future,使用場景:并發請求多服務,總耗時為最長響應時間;提升總響應時間,但是阻塞主請求線程,高并發時依然會造成線程數過多,CPU上下文切換;

全異步(Callback)

Callback方式調用,使用場景:不考慮回調時間且只能對結果做簡單處理,如果依賴服務是兩個或兩個以上服務,則不能合并兩個服務的處理結果;不阻塞主請求線程,但使用場景有限。

異步回調鏈式編排

異步回調鏈式編排(JDK8 CompletableFuture),使用場景:其實不是異步調用方式,只是對依賴多服務的Callback調用結果處理做結果編排,來彌補Callback的不足,從而實現全異步鏈式調用。

接下來看看如何設計利用全異步Callback調用和異步回調鏈式編排處理結果來實現全異步系統設計。

同步阻塞調用

  1. public class Test { 
  2.    public static void main(String[] args) throws Exception { 
  3.        RpcService rpcService = new RpcService(); 
  4.        HttpService httpService = new HttpService(); 
  5.        //耗時10ms 
  6.        Map<String, String> result1 = rpcService.getRpcResult(); 
  7.        //耗時20ms 
  8.        Integer result2 = httpService.getHttpResult(); 
  9.        //總耗時30ms 
  10.     } 
  11.    static class RpcService { 
  12.        Map<String, String> getRpcResult() throws Exception { 
  13.            //調用遠程方法(遠程方法耗時約10ms,可以使用Thread.sleep模擬) 
  14.        } 
  15.     } 
  16.    static class HttpService { 
  17.        Integer getHttpResult() throws Exception { 
  18.            //調用遠程方法(遠程方法耗時約20ms,可以使用Thread.sleep模擬) 
  19.            Thread.sleep(20); 
  20.            return 0; 
  21.        } 
  22.     } 

半異步(異步Future)

  1. public class Test { 
  2.    final static ExecutorService executor = Executors.newFixedThreadPool(2); 
  3.    public static void main(String[] args) { 
  4.        RpcService rpcService = new RpcService(); 
  5.        HttpService httpService = new HttpService(); 
  6.        Future<Map<String, String>> future1 = null
  7.        Future<Integer> future2 = null
  8.        try { 
  9.            future1 = executor.submit(() -> rpcService.getRpcResult()); 
  10.            future2 = executor.submit(() -> httpService.getHttpResult()); 
  11.            //耗時10ms 
  12.            Map<String, String> result1 = future1.get(300, TimeUnit.MILLISECONDS); 
  13.            //耗時20ms 
  14.            Integer result2 = future2.get(300, TimeUnit.MILLISECONDS); 
  15.            //總耗時20ms 
  16.        } catch (Exception e) { 
  17.            if (future1 != null) { 
  18.                 future1.cancel(true); 
  19.            } 
  20.            if (future2 != null) { 
  21.                 future2.cancel(true); 
  22.            } 
  23.            throw new RuntimeException(e); 
  24.        } 
  25.     } 
  26.    static class RpcService { 
  27.        Map<String, String> getRpcResult() throws Exception { 
  28.            //調用遠程方法(遠程方法耗時約10ms,可以使用Thread.sleep模擬) 
  29.        } 
  30.     } 
  31.    static class HttpService { 
  32.        Integer getHttpResult() throws Exception { 
  33.            //調用遠程方法(遠程方法耗時約20ms,可以使用Thread.sleep模擬) 
  34.        } 
  35.     } 
  36.   

全異步(Callback)

  1. public class AsyncTest { 
  2. public staticHttpAsyncClient httpAsyncClient; 
  3.    public static CompletableFuture<String> getHttpData(String url) { 
  4.        CompletableFuture asyncFuture = new CompletableFuture(); 
  5.        HttpPost post = new HttpPost(url); 
  6.        HttpAsyncRequestProducer producer = HttpAsyncMethods.create(post); 
  7.        AsyncCharConsumer<HttpResponse> consumer = newAsyncCharConsumer<HttpResponse>() { 
  8.             HttpResponse response; 
  9.            protected HttpResponse buildResult(final HttpContext context) { 
  10.                 return response; 
  11.            } 
  12. …... 
  13.        }; 
  14.        FutureCallback callback = new FutureCallback<HttpResponse>() { 
  15.            public void completed(HttpResponse response) { 
  16.                asyncFuture.complete(EntityUtils.toString(response.getEntity())); 
  17.            } 
  18. …... 
  19.        }; 
  20.        httpAsyncClient.execute(producer, consumer, callback); 
  21.        return asyncFuture; 
  22.     } 
  23.   
  24.    public static void main(String[] args) throws Exception { 
  25.        AsyncTest.getHttpData("http://www.jd.com"); 
  26.        Thread.sleep(1000000); 
  27.     } 

本示例使用HttpAsyncClient演示。

異步回調鏈式編排

CompletableFuture提供了50多個API,可以滿足所需的各種場景的異步處理的編排,在此列舉三個場景:

場景1:三個服務并發異步調用,返回CompletableFuture,不阻塞主線程;

三個服務并發異步調用,返回CompletableFuture

方法test1:

  1. public static void test1() throws Exception { 
  2.       HelloClientDemoTest service = new HelloClientDemoTest(); 
  3.       /** 
  4.        * 場景1 兩個以上服務并發異步調用,返回CompletableFuture,不阻塞主線程 
  5.        * 并且兩個服務也是異步非阻塞調用 
  6.        */ 
  7.       CompletableFuture future1 = service.getHttpData("http://www.jd.com"); 
  8.       CompletableFuture future2 = service.getHttpData("http://www.jd.com"); 
  9.       CompletableFuture future3 =service.getHttpData("http://www.jd.com"); 
  10.       List<CompletableFuture> futureList = Lists.newArrayList(future1,future2, future3); 
  11.       CompletableFuture<Void> allDoneFuture =CompletableFuture.allOf(futureList.toArray(newCompletableFuture[futureList.size()])); 
  12.       CompletableFuture<String> future4 =allDoneFuture.thenApply(v -> { 
  13.            List<Object> result =futureList.stream().map(CompletableFuture::join) 
  14.                   .collect(Collectors.toList()); 
  15.            //注意順序 
  16.            String result1 = (String)result.get(0); 
  17.            String result2 = (String)result.get(1); 
  18.            String result3 = (String)result.get(2); 
  19.            //處理業務.... 
  20.            return result1 + result2 + result3; 
  21.        }).exceptionally(e -> { 
  22.            //e.printStackTrace(); 
  23.            return ""; 
  24.        }); 
  25.       //返回 
  26.    } 

場景2、兩個服務并發異步調用,返回CompletableFuture,不阻塞主線程;

兩個服務并發異步調用,返回CompletableFuture

方法test2:

  1. public void test2() throws Exception { 
  2.       HelloClientDemoTest service = new HelloClientDemoTest(); 
  3.       /** 
  4.        * 場景2 兩個接口并發異步調用,返回CompletableFuture,不阻塞主線程 
  5.        * 并且兩個服務也是異步非阻塞調用 
  6.        */ 
  7.       CompletableFuture future1 = service.getHttpData("http://www.jd.com"); 
  8.       CompletableFuture future2 =service.getHttpData("http://www.jd.com"); 
  9.       CompletableFuture future3 =future1.thenCombine(future2, (f1, f2) -> { 
  10.            //處理業務.... 
  11.            return f1 + "," + f2; 
  12.        }).exceptionally(e -> { 
  13.            return ""; 
  14.        }); 
  15.       //返回 
  16.    } 

場景3、兩個服務,并發異步調用兩個服務,并且一個服務的結果返回后再次調用另一服務,然后將三個結果后并處理,返回CompletableFuture,整個處理過程中不阻塞任何線程;

方法test3:

  1. publicvoid test3() throws Exception { 
  2.        HelloClientDemoTest service = new HelloClientDemoTest(); 
  3.        /** 
  4.         * 場景3 兩請求依賴調用,然后與另一服務結果組合處理,返回CompletableFuture,不阻塞主線程 
  5.         * 并且兩個服務也是異步非阻塞調用 
  6.         */ 
  7.         CompletableFuture future1 = service.getHttpData("http://www.jd.com"); 
  8.         CompletableFuture future2 = service.getHttpData("http://www.jd.com"); 
  9.         CompletableFuture<String> future3future1.thenApply((param) -> { 
  10.             CompletableFuture future4 =service.getHttpData("http://www.jd.com"); 
  11.             return future4; 
  12.         }); 
  13.         CompletableFuture future5 =future2.thenCombine(future3, (f2, f3) -> { 
  14.             //....處理業務 
  15.             return f2 + "," + f3; 
  16.         }).exceptionally(e -> { 
  17.             return ""; 
  18.         }); 
  19.         //返回future5 
  20.     } 

全異步Web系統設計

主要技術:servlet3,JDK8 CompletableFuture,支持異步Callback調用的RPC框架。

先看一下處理流程圖:

全異步Web系統設計主要技術處理流程圖

servlet3:Servlet 接收到請求之后,可能首先需要對請求攜帶的數據進行一些預處理;接著,Servlet 線程將請求轉交給一個異步線程來執行業務處理,線程本身返回至容器。針對業務處理較耗時的情況,這將大大減少服務器資源的占用,并且提高并發處理速度。servlet3可參考商品詳情頁系統的Servlet3異步化實踐,結合其中講解的servlet3整合:

  1. public void submitFuture(finalHttpServletRequest req, final Callable<CompletableFuture> task) throwsException{ 
  2.        final String uri = req.getRequestURI(); 
  3.        final Map<String, String[]> params = req.getParameterMap(); 
  4.        final AsyncContext asyncContext = req.startAsync(); 
  5.        asyncContext.getRequest().setAttribute("uri", uri); 
  6.        asyncContext.getRequest().setAttribute("params", params); 
  7.        asyncContext.setTimeout(asyncTimeoutInSeconds * 1000); 
  8.        if(asyncListener != null) { 
  9.            asyncContext.addListener(asyncListener); 
  10.        } 
  11.        CompletableFuture future = task.call(); 
  12.        future.thenAccept(result -> { 
  13.            HttpServletResponse resp = (HttpServletResponse)asyncContext.getResponse(); 
  14.            try { 
  15.                 if(result instanceof String) { 
  16.                     byte[] bytes = new byte[0]; 
  17.                     if (StringUtils.isBlank(result)){ 
  18.                        resp.setContentType("text/html;charset=gbk"); 
  19.                        resp.setContentLength(0); 
  20.                     } else { 
  21.                         bytes =result.getBytes("GBK"); 
  22.                     } 
  23.                    //resp.setBufferSize(bytes.length); 
  24.                    resp.setContentType("text/html;charset=gbk"); 
  25.                    if(StringUtils.isNotBlank(localIp)) { 
  26.                        resp.setHeader("t.ser", localIp); 
  27.                     } 
  28.                    resp.setContentLength(bytes.length); 
  29.                    resp.getOutputStream().write(bytes); 
  30.                 } else { 
  31.                     write(resp,JSONUtils.toJSON(result)); 
  32.                 } 
  33.            } catch (Throwable e) { 
  34.                resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); //程序內部錯誤 
  35.                 try { 
  36.                     LOG.error("get infoerror, uri : {},  params : {}", uri,JSONUtils.toJSON(params), e); 
  37.                 } catch (Exception ex) { 
  38.                 } 
  39.            } finally { 
  40.                 asyncContext.complete(); 
  41.            } 
  42.        }).exceptionally(e -> { 
  43.            asyncContext.complete(); 
  44.            return null; 
  45.        }); 

另外還有Java中協程庫Quasar,可參考《Java的纖程庫 - Quasar》,目前沒有在應用中使用并在測試FiberHttpServlet的時候遇到很多坑,日后把Quasar自如運用后形成日記,希望能結實更多的朋友一起研究,踩坑。

作者:孫偉,目前負責京東商品詳情頁統一服務系統,寫過java,寫過ngx_lua,還寫過storm等,喜歡學習研究新事物。

【本文來自51CTO專欄作者張開濤的微信公眾號(開濤的博客),公眾號id: kaitao-1234567】

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

責任編輯:趙寧寧 來源: 開濤的博客
相關推薦

2016-11-28 09:00:10

瀏覽器瀏覽器緩存服務端

2016-11-28 08:40:17

系統降級服務

2016-11-25 00:45:37

隊列數據

2018-03-28 08:52:53

阻塞非阻塞I

2016-11-28 08:58:43

系統限流算法

2016-11-28 08:58:43

系統限流

2023-12-06 07:28:47

阻塞IO異步IO

2024-09-23 17:15:28

Python并發并行

2021-01-10 11:21:33

JavaScript語言開發

2021-02-27 16:08:17

Java異步非阻塞

2019-07-23 11:01:57

Python同步異步

2012-10-10 10:00:27

同步異步開發Java

2012-02-22 21:15:41

unixIO阻塞

2016-11-25 00:38:45

隔離負載均衡系統

2025-02-17 13:23:34

Python同步阻塞MySQL

2022-06-22 08:16:29

異步非阻塞框架

2022-06-12 06:45:26

高并發防重

2023-09-25 08:06:44

工具非阻塞式接口

2015-07-03 10:12:04

編程同步非阻塞

2024-10-14 12:34:08

點贊
收藏

51CTO技術棧公眾號

亚洲美女自拍偷拍| 国产成人精品视频在线观看| 免费不卡av网站| 日本欧美电影在线观看| 99久久99久久精品免费看蜜桃| 欧美在线性爱视频| 国产精品久久久久久成人| 国产精品3区| 激情成人中文字幕| 日韩一二三区不卡在线视频| 99精品在线看| 久久天天综合| 欧美国产日韩一区二区三区| av网在线播放| 在线精品视频一区| 欧洲av一区二区嗯嗯嗯啊| 狠狠精品干练久久久无码中文字幕 | 欧洲一区二区视频| 欧美黄色aaa| 国产精品嫩模av在线| 日韩一区二区三区电影| 色婷婷综合久久久久中文字幕| 污视频在线看网站| 欧美韩日一区二区三区| 久久精品aaaaaa毛片| 国产美女永久免费| 日韩av网站在线观看| 97精品视频在线观看| 亚洲一级生活片| 国产欧美日韩精品一区二区免费| 亚洲激情第一页| 国产探花在线观看视频| 88xx成人网| 欧美日韩激情小视频| 国产亚洲精品久久久久久久| seseavlu视频在线| 久久午夜色播影院免费高清| 国产精品一区二区三区免费观看 | 美腿丝袜亚洲色图| 日本91av在线播放| 永久免费看片在线播放| 国产精品草草| 欧美激情视频网址| 欧美成人精品一区二区免费看片| 国产精品久久久久一区二区三区厕所 | 999久久久国产精品| 一区二区三区视频免费在线观看| theav精尽人亡av| 天堂资源在线亚洲| 日韩精品免费看| 极品粉嫩小仙女高潮喷水久久| 懂色av一区二区| 亚洲国产精品字幕| 久久久久9999| 日韩三级av| 精品五月天久久| 色哟哟精品观看| 国产精品亚洲人成在99www| 亚洲免费人成在线视频观看| 亚洲狠狠婷婷综合久久久久图片| 婷婷精品在线| 亚洲女人天堂成人av在线| 少妇光屁股影院| 国产a久久精品一区二区三区| 日韩电影免费观看中文字幕| 亚洲一级中文字幕| 欧美日韩国产在线观看网站| 在线视频中文亚洲| 99热这里只有精品4| 91精品啪在线观看国产18| 久久精品男人天堂| 久草视频手机在线观看| 在线视频观看日韩| 57pao成人永久免费视频| 国产精品va无码一区二区三区| 玖玖在线精品| 国产日韩av高清| av男人天堂av| av亚洲精华国产精华| 美脚丝袜一区二区三区在线观看| 川上优的av在线一区二区| 国产精品国产三级国产aⅴ无密码| www亚洲国产| 24小时免费看片在线观看| 色综合久久久久综合体| 亚洲综合色在线观看| 国产免费av国片精品草莓男男 | 外国精品视频在线观看| 91香蕉国产在线观看软件| 日本在线观看一区二区| 黄色成人影院| 污片在线观看一区二区| 中文字幕第80页| 免费观看亚洲视频大全| 日韩av网站大全| 亚洲人做受高潮| 日韩亚洲在线| 成人精品在线观看| 午夜av免费在线观看| 国产精品美女久久久久久| 狠狠精品干练久久久无码中文字幕| 中日韩脚交footjobhd| 91精品午夜视频| 黄色a一级视频| 91精品国产麻豆国产在线观看| 88xx成人精品| 99久久精品国产一区色| 久久综合色综合88| 国产精品jizz在线观看老狼| 中文字幕 在线观看| 91精品麻豆日日躁夜夜躁| 国产夫妻性爱视频| 午夜精彩国产免费不卡不顿大片| 热99久久精品| 老熟妇高潮一区二区高清视频| 国产精品美女一区二区三区 | 国内精品伊人久久久久av影院| 国产美女在线精品免费观看| 欧美猛烈性xbxbxbxb| 色悠久久久久综合欧美99| 亚洲v在线观看| 99久久影视| 国产精品高潮呻吟久久av无限| 男人天堂手机在线观看| 亚洲美女在线一区| 污视频网站观看| 国产99久久久国产精品成人免费| 韩国v欧美v日本v亚洲| 国产麻豆免费视频| 国产精品久久久久影院老司| 国语对白做受xxxxx在线中国| 盗摄系列偷拍视频精品tp| 麻豆乱码国产一区二区三区| 在线观看xxxx| 国产精品三级久久久久三级| 男人舔女人下面高潮视频| 色狼人综合干| 97香蕉超级碰碰久久免费软件| www日本高清视频| 亚洲日本一区二区三区| 中文字幕在线综合| 日韩国产在线| 国产精品网址在线| 国产区高清在线| 在线视频一区二区三| 成人免费看aa片| 首页亚洲欧美制服丝腿| 麻豆亚洲一区| 欧美成人资源| 国产一区二区三区欧美| 久久精品视频2| 国产蜜臀av在线一区二区三区| 国产精品乱码久久久久| 国产日产精品一区二区三区四区的观看方式 | 成人免费在线电影网| 久久久久久久久久久免费| www日本高清| 午夜精品123| 欧美 变态 另类 人妖| 噜噜噜久久亚洲精品国产品小说| 快播亚洲色图| 亚洲伦乱视频| 色综合伊人色综合网站| 国产原创中文av| 夜夜嗨av一区二区三区网页 | 欧美精品aaaa| 日韩影院二区| 99久久久精品免费观看国产| 6699嫩草久久久精品影院| 亚洲欧美日韩成人| 久操视频在线免费观看| 国产欧美日韩中文久久| jizz欧美性11| 国产一区亚洲| 久久精品二区| 韩国理伦片久久电影网| 超碰91人人草人人干| 好吊视频一区二区三区| 欧美性xxxxx极品娇小| 亚洲精品国产精品国自产网站| 理论电影国产精品| 久久亚洲国产成人精品无码区| 婷婷精品视频| 91久久精品国产| 美女av在线免费看| 在线电影欧美日韩一区二区私密| 国产乱码精品一区二区| 偷拍亚洲欧洲综合| 久久久久亚洲AV成人无在| 国产激情一区二区三区桃花岛亚洲| 国产精品12345| 日韩欧美大片| 国产一区二区精品免费| 国产韩日精品| 欧美黑人一区二区三区| 国产高清视频在线播放| 日韩欧美中文一区二区| 老熟妇一区二区三区| 亚洲美女视频在线| 欧美色图亚洲激情| 国产精品亚洲第一| 99热这里只有精品在线播放| 国内视频精品| 日韩中文字幕一区二区| 久久草在线视频| 成人自拍性视频| www成人在线视频| 欧美精品videosex牲欧美| a黄色在线观看| 日韩h在线观看| 国产成人av免费看| 欧洲视频一区二区| 亚洲另类欧美日韩| 亚洲另类春色国产| 女人黄色一级片| 久久综合精品国产一区二区三区 | 亚洲综合五月天婷婷丁香| 五月婷婷激情综合网| 精品国产欧美日韩不卡在线观看 | 久艹视频在线观看| 国产精品传媒在线| 无码少妇精品一区二区免费动态| 成人一区二区视频| 亚洲图片 自拍偷拍| 免费高清成人在线| 国产v亚洲v天堂无码久久久| 亚洲国产二区| 天堂8在线天堂资源bt| 68国产成人综合久久精品| 日韩欧美视频一区二区| 亚洲天堂日韩在线| 久99久在线| 欧美激情15p| 国产伦精品一区二区三区在线| 精品国产一区二区三区2021| 91精品免费看| 国产一区二区久久久久| 国产日韩中文在线| 成人在线高清| 国产欧美一区二区三区视频| 成人午夜一级| 国产美女精品免费电影| 国产精品第一| 91精品久久久久久久久久久久久| av免费在线一区| 国产免费成人av| 日韩黄色碟片| 91午夜理伦私人影院| 国产视频一区二| 91手机在线播放| 伊人久久大香| 91一区二区三区| 懂色av一区二区| 久久久一本精品99久久精品66| 青青草这里只有精品| 久久偷看各类wc女厕嘘嘘偷窃| 天堂网av成人| 亚洲精品国产精品国自产观看| 四虎成人av| 91免费版看片| 日韩视频精品在线观看| 国产精品无码专区av在线播放| 日韩精品一二三四| 成人av毛片在线观看| 国产伦精品一区二区三区视频青涩 | 影音先锋在线国产| 欧美少妇一区二区| 国产精品伦一区二区三区| 4438x成人网最大色成网站| 亚洲国产精品欧美久久| 亚洲精品福利免费在线观看| 国产在线视频网站| 久久好看免费视频| 99爱在线观看| 国产精品视频久| 日韩中文字幕一区二区高清99| 国产亚洲情侣一区二区无| 精品免费av| 毛片av在线播放| 久久aⅴ乱码一区二区三区| 色综合天天色综合| 岛国精品在线播放| 在线不卡av电影| 亚洲激情综合网| 欧美一区免费看| 日韩精品影音先锋| 黄上黄在线观看| 欧美乱妇高清无乱码| 亚洲高清黄色| 91传媒在线免费观看| 久久99视频| 国产高清www| 六月丁香综合在线视频| av电影在线播放| 中文字幕欧美日本乱码一线二线| 欧美又粗又大又长| 欧美午夜精品久久久久久人妖| 国产精品视频无码| 亚洲欧美中文字幕| 在线播放免费av| 国产精品久久久久久久一区探花| 一区二区三区免费在线看| 日韩欧美亚洲在线| 1024成人| 潘金莲一级淫片aaaaaaa| 国产午夜精品久久久久久免费视| 久久免费视频99| 欧美另类久久久品| 狠狠色伊人亚洲综合网站l| 欧美日韩国产123| 视频欧美精品| 日韩视频专区| 亚洲在线黄色| 国产一精品一aⅴ一免费| 成人免费在线观看入口| 久久久久久在线观看| 亚洲国产精品人久久电影| 中文字幕在线三区| 国产欧美精品一区二区| 综合亚洲色图| 免费看国产曰批40分钟| 国产风韵犹存在线视精品| 亚洲熟女少妇一区二区| 91福利视频网站| 青青久在线视频免费观看| 久久免费观看视频| 日韩精品久久久久久久软件91| 一区二区三区四区欧美日韩| 日韩激情av在线| 国产手机在线观看| 欧美日韩国产影院| 欧美自拍偷拍一区二区| 欧美激情免费观看| 999久久久精品一区二区| 精品嫩模一区二区三区| 精品一二三四区| 欧美另类videoxo高潮| 欧美日韩亚洲综合在线| 91官网在线| 国产精品一区二区久久久| 人人狠狠综合久久亚洲婷婷| 欧美精品一区二区三区免费播放| 久久网这里都是精品| 国产中文字幕视频| 亚洲美女中文字幕| 桃花岛tv亚洲品质| 日韩不卡av| 蜜桃久久精品一区二区| 波多野结衣家庭教师在线观看| 欧美三级视频在线| 8888四色奇米在线观看| 国产欧美日韩丝袜精品一区| 91视频一区| 久久久久久综合网| 亚洲黄色小说网站| 黄色av中文字幕| 欧美性受xxxx黑人猛交| 久操成人av| 国产无遮挡猛进猛出免费软件 | 亚洲欧美日韩国产中文专区| 日韩福利一区| 中文字幕欧美日韩一区二区| 国产呦萝稀缺另类资源| 麻豆91精品91久久久| 亚洲成色777777在线观看影院 | 成人免费xxxxx在线观看| 亚洲五月综合| 亚洲av人人澡人人爽人人夜夜| 欧美日韩综合视频| 1区2区3区在线观看| 亚洲一区二区中文字幕| av不卡在线看| 人人爽人人爽人人片| 宅男噜噜噜66一区二区66| 成人女同在线观看| 欧美久久久久久久| 久久se精品一区精品二区| 久草成人在线视频| 亚洲免费视频在线观看| 成年永久一区二区三区免费视频| a天堂资源在线观看| 26uuu国产电影一区二区| 中文字幕91爱爱| 欧美国产乱视频| 一区二区三区日本久久久| 国产精品自拍视频在线| 亚洲在线观看免费| 国产精品一区在线看| 99爱精品视频| 日韩成人午夜电影| 久久久久噜噜噜亚洲熟女综合| 亚洲人成网站777色婷婷| 精品国产亚洲一区二区三区| 国产精品丝袜久久久久久消防器材| 国产精品久久免费看| 欧美日韩在线精品一区二区三区激情综 | 黄色一级片网址| 久久这里都是精品| 精品人妻一区二区三区浪潮在线 | 狠狠做六月爱婷婷综合aⅴ|