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

深入Netty邏輯架構,從Reactor線程模型開始

開發 前端
本文從Reactor線程模型開始說起,到Netty如何用EventLoop實現Reactor線程模型。

[[405910]]

本文是Netty系列第6篇

上一篇文章我們從一個Netty的使用Demo,了解了用Netty構建一個Server服務端應用的基本方式。并且從這個Demo出發,簡述了Netty的邏輯架構。

今天主要是深入學習下 邏輯架構 中的EventLoop 和 EventLoopGroup,掌握Netty的線程模型,這是Netty最精髓的知識點之一。

本文預計閱讀時間約 「15分鐘」,將重點圍繞以下幾個問題展開:

1.什么是Reactor線程模型?

2.EventLoopGroup、EventLoop 怎么實現Reactor線程模型?

3.深入Netty的線程模型優化

  • Netty3和Netty4的線程模型變化
  • 什么是Netty4線程模型的無鎖串行化

4.從線程模型看最佳實踐

先簡單回顧下上一篇的邏輯架構圖,看看EventLoop 和 EventLoopGroup是在什么位置。

1.什么是Reactor線程模型?

先來回顧下我們在Netty系列的第2篇介紹的I/O線程模型,包括BIO、NIO、I/O多路復用、信號驅動IO、AIO。IO多路復用在Java中有專門的NIO包封裝了相關的方法。

前面的文章也說過,使用Netty而不是直接使用Java NIO包,就是因為Netty幫我們封裝了許多對NIO包的使用細節,做了許多優化。

其中非常著名的,就是Netty的「Reactor線程模型」。

  • 前置知識如果還不太清楚,可以回頭看看前面幾篇文章:
  • 《沒搞清楚網絡I/O模型?那怎么入門Netty》
  • 《從網絡I/O模型到Netty,先深入了解下I/O多路復用》
  • 《從I/O多路復用到Netty,還要跨過Java NIO包》

Reactor模式 是一種「事件驅動」模式。

「Reactor線程模型」就是通過 單個線程 使用Java NIO包中的Selector的select()方法,進行監聽。當獲取到事件(如accept、read等)后,就會分配(dispatch)事件進行相應的事件處理(handle)。

如果要給 Reactor線程模型 下一個更明確的定義,應該是:

  • Reactor線程模式 = Reactor(I/O多路復用)+ 線程池

其中Reactor負責監聽和分配事件,線程池負責處理事件。

然后,根據Reactor的數量和線程池的數量,又可以將Reactor分為三種模型

  • 單Reactor單線程模型 (固定大小為1的線程池)
  • 單Reactor多線程模型
  • 多Reactor多線程模型 (一般是主從2個Reactor)

1.1 單Reactor單線程模型

Reactor內部通過 selector 監聽連接事件,收到事件后通過dispatch進行分發。

  • 如果是連接建立的事件,通過accept接受連接,并創建一個Handler來處理連接后續的各種事件。
  • 如果是讀寫事件,直接調用連接對應的Handler來處理,Handler完成 read => (decode => compute => encode) => send 的全部流程

這個過程中,無論是事件監聽、事件分發、還是事件處理,都始終只有 一個線程 執行所有的事情。

缺點:

在請求過多時,會無法支撐。因為只有一個線程,無法發揮多核CPU性能。

而且一旦某個Handler發生阻塞,服務端就完全無法處理其他連接事件。

1.2 單Reactor多線程模型

為了提高性能,我們可以把復雜的事件處理handler交給線程池,那就可以演進為 「單Reactor多線程模型」 。 

這種模型和第一種模型的主要區別是把業務處理從之前的單一線程脫離出來,換成線程池處理。

1)Reactor線程

通過select監聽客戶請求,如果是連接建立的事件,通過accept接受連接,并創建一個Handler來處理連接后續的讀寫事件。這里的Handler只負責響應事件、read和write事件,會將具體的業務處理交由Worker線程池處理。

只處理連接事件、讀寫事件。

2)Worker線程池

處理所有業務事件,包括(decode => compute => encode) 過程。

充分利用多核機器的資源,提高性能。

缺點:

在極個別特殊場景中,一個Reactor線程負責監聽和處理所有的客戶端連接可能會存在性能問題。例如并發百萬客戶端連接(雙十一、春運搶票)

1.3 多Reactor多線程模型

為了充分利用多核能力,可以構建兩個 Reactor,這就演進為 「主從Reactor線程模型」 。

1)主Reactor

主 Reactor 單獨監聽server socket,accept新連接,然后將建立的 SocketChannel 注冊給指定的 從Reactor,

2)從Reactor

從Reactor 將連接加入到連接隊列進行監聽,并創建handler進行事件處理。執行事件的讀寫、分發,把業務處理就扔給worker線程池完成。

3)Worker線程池

處理所有業務事件,充分利用多核機器的資源,提高性能。

輕松處理百萬并發。

缺點:

實現比較復雜。

不過有了Netty,一切都變得簡單了。

Netty幫我們封裝好了一切,可以快速使用主從Reactor線程模型(Netty4的實現上增加了無鎖串行化設計),具體代碼這里就不貼了,可以看看上一篇的Demo。

2. EventLoop、EventLoopGroup 怎么實現Reactor線程模型?

上面我們已經了解了Reactor線程模型,了解了它的核心就是:

  • Reactor線程模式 = Reactor(I/O多路復用)+ 線程池

它的運行模式包括四個步驟:

  • 連接注冊:建立連接后,將channel注冊到selector上
  • 事件輪詢:selcetor上輪詢(select()函數)獲取已經注冊的channel的所有I/O事件(多路復用)
  • 事件分發:把準備就緒的I/O事件分配到對應線程進行處理
  • 事件處理:每個worker線程執行事件任務

那這樣的模型在Netty中具體怎么實現呢?

這就需要我們了解下EventLoop和EventLoopGroup了。

2.1 EventLoop是什么

EventLoop 不是Netty獨有的,它本身是一個通用的 事件等待和處理的程序模型。主要用來解決多線程資源消耗高的問題。例如 Node.js 就采用了 EventLoop 的運行機制。

那么,在Netty中,EventLoop是什么呢?

  • 一個Reactor模型的事件處理器。
  • 單獨一個線程。
  • 一個EventLoop內部會維護一個selector和一個「taskQueue任務隊列」,分別負責處理 「I/O事件」 和 「任務」。

「taskQueue任務隊列」是多生產者單消費者隊列,在多線程并發添加任務時,可以保證線程安全。

「I/O事件」即selectionKey中的事件,如accept、connect、read、write等;

「任務」包括 普通任務、定時任務等。

  • 普通任務:通過 NioEventLoop 的 execute() 方法向任務隊列 taskQueue 中添加任務。例如 Netty 在寫數據時會封裝 WriteAndFlushTask 提交給 taskQueue。
  • 定時任務:通過調用 NioEventLoop 的 schedule() 方法向 定時任務隊列 scheduledTaskQueue 添加一個定時任務,用于周期性執行該任務(如心跳消息發送等)。定時任務隊列的任務 到了執行時間后,會合并到 普通任務 隊列中進行真正執行。

一圖勝千言:

 

EventLoop單線程運行,循環往復執行三個動作:

  • selector事件輪詢
  • I/O事件處理
  • 任務處理

2.2 EventLoopGroup是什么

EventLoopGroup比較簡單,可以簡單理解為一個“EventLoop線程池”。 


Tips:

監聽一個端口,只會綁定到 BossEventLoopGroup 中的一個 Eventloop,所以, BossEventLoopGroup 配置多個線程也無用,除非你同時監聽多個端口。

2.3 具體實現

Netty可以通過簡單配置,支持單Reactor單線程模型 、單Reactor多線程模型 、多Reactor多線程模型。

我們以 「多Reactor多線程模型」 為例,來看看Netty是如何通過EventLoop來實現的。

還是一圖勝千言:

我們結合Reactor線程模型的四個步驟來梳理一下:

1)連接注冊

master EventLoopGroup中有一個EventLoop,綁定某個特定端口進行監聽。

一旦有新的連接進來觸發accept類型事件,就會在當前EventLoop的I/O事件處理階段,將這個連接分配給slave EventLoopGroup中的某一個EventLoop,進行后續 事件的監聽。

2)事件輪詢

slave EventLoopGroup中的EventLoop,會通過selcetor對綁定到自身的channel進行輪詢,獲取已經注冊的channel的所有I/O事件(多路復用)。

當然,EventLoopGroup中會有 多個EventLoop 運行,各自循環處理。具體EventLoop數量是由 用戶指定的線程數 或者 默認為核數的2倍。

3)事件分發

當slave EventLoopGroup中的EventLoop獲取到I/O事件后,會在EventLoop的 I/O事件處理(processSelectedKeys) 階段分發給對應ChannelPipeline進行處理。

注意,仍然在當前線程進行串行處理

4)事件處理

在ChannelPipeline中對I/O事件進行處理。

I/O事件處理完后,EventLoop在 任務處理(runAllTasks) 階段,對隊列中的任務進行消費處理。

至此,我們就能完全梳理清楚EventLoopGroup/EventLoop 和 Reactor線程模型的關系了。

咦,好像有什么地方不對勁?

沒錯,細心的朋友可能會發現,slave EventLoopGroup中并不是

  • 一個selector + 線程池

而是有多個EventLoop組成的

  • 多selector + 多個單線程

這是為什么呢?

那就得繼續深入了解下Netty4的線程模型優化了。

3. 深入Netty的線程模型優化

上文說過,對每個EventLoop來說,都是單線程運行,并循環往復執行三個動作:

  • selector事件輪詢
  • I/O事件處理
  • 任務處理

在slave EventLoopGroup中,并不是 “一個selector + 線程池”模式,而是有多個EventLoop組成的 “多selector + 多個單線程“ 模型,這是為什么呢?

這主要是因為我們分析的是Netty4的線程模型,跟Netty3的傳統Reactor模型相比有了不同之處。

3.1 Netty3和Netty4的線程模型變化

在Netty3的線程模型中,分為 讀事件處理模型 和 寫事件處理模型。

  • read事件的ChannelHandler都是由Netty的 I/O 線程(對應Netty 4 中的 EventLoop)中負責執行。
  • I/O線程調度執行ChannelPipeline中Handler鏈的對應方法,直到業務實現的End Handler。
  • End Handler將消息封裝成Runnable,放入到業務線程池中執行,I/O線程返回,繼續讀/寫等I/O操作。

 

  • write事件是由調用線程處理,可能是 I/O 線程,也可能是業務線程。
  • 如果是業務線程,那么業務線程會執行ChannelPipeline中的Channel Handler。
  • 執行到系統最后一個ChannelHandler,將編碼后的消息Push到發送隊列中,業務線程返回。
  • Netty的I/O線程從發送消息隊列中取出消息,調用SocketChannel的write方法進行消息發送。

由上文可以看到,在Netty3的線程模型中,是采用“selector + 業務線程池”的模型。

注意,在這種模型下,讀寫模型不一致。尤其是讀事件、寫事件的「執行線程」是不一樣的。

但是在Netty4的線程模型中,采用了“多selector + 多個單線程”模型。

讀事件:

  • I/O線程NioEventLoop從SocketChannel中讀取數據,將ByteBuf投遞到ChannelPipeline,觸發ChannelRead事件;
  • I/O線程NioEventLoop調用ChannelHandler鏈,直到將消息投遞到業務線程,然后I/O線程返回,繼續后續的操作。

寫事件:

  • 業務線程調用ChannelHandlerContext.write(Object msg)方法進行消息發送。
  • ChannelHandlerInvoker將發送消息封裝成 任務,放入到EventLoop的Mpsc任務隊列中,業務線程返回。后續由EventLoop在循環中統一調度和執行。
  • I/O線程EventLoop在進行 任務處理 時,從Mpsc任務隊列中獲取任務,調用ChannelPipeline進行處理,處理Outbound事件,直到將消息放入發送隊列,然后喚醒Selector,執行寫操作。

Netty4中,無論讀寫,都是通過I/O線程(也就是EventLoop)來統一處理。

為什么Netty4的線程模型做了這樣的變化?答案就是 無鎖串行化設計。

3.2 什么是Netty4線程模型的無鎖串行化

我們先看看Netty3的線程模型存在什么問題:

讀/寫線程模型 不一致,帶來額外的開發心智負擔。

寫操作由業務線程發起時,通常業務會使用 線程池多線程并發執行 某個業務流程,所以某一個時刻會有多個業務線程同時操作ChannelHandler,我們需要對ChannelHandler進行并發保護,大大降低了開發效率。

頻繁的線程上下文切換,會帶來額外的性能損耗。

而Netty4線程模型的 「無鎖串行化」設計,就很好地解決了這些問題。

一圖勝千言:

從事件輪詢、消息的讀取、編碼以及后續Handler的執行,始終都由I/O線程NioEventLoop內部進行串行操作,這就意味著整個流程不會進行線程上下文的切換,避免多線程競爭導致的性能下降,數據也不會面臨被并發修改的風險。

表面上看,串行化設計似乎CPU利用率不高,并發程度不夠。但是,通過調整slave EventLoopGroup的線程參數,可以同時啟動多個NioEventLoop,串行化的線程并行運行,這種局部無鎖化的串行線程設計相比「一個隊列-多個工作線程模型」性能更優。

總結下Netty4無鎖串行化設計的優點:

  • 一個EventLoop會處理一個channel全生命周期的所有事件。從消息的讀取、編碼以及后續Handler的執行,始終都由I/O線程NioEventLoop負責。
  • 每個EventLoop會有自己獨立的任務隊列。
  • 整個流程不會進行線程上下文的切換,數據也不會面臨被并發修改的風險。
  • 對于用戶而言,統一的讀寫線程模型,也降低了使用的心智負擔。

4. 從線程模型看最佳實踐

NioEventLoop 無鎖串行化的設計這么好,它就完美無缺了嗎?

不是的!

在特定的場景下,Netty3的線程模型可能性能更高。比如編碼和其它寫操作非常耗時,由多個業務線程并發執行,性能肯定高于單個EventLoop線程串行執行。

因此,雖然單線程執行避免了線程切換,但是它的缺陷就是不能執行時間過長的 I/O 操作,一旦某個 I/O 事件發生阻塞,那么后續的所有 I/O 事件都無法執行,甚至造成事件積壓。

所以,Netty4的線程模型的最佳實踐需要注意以下兩點:

  • 無論讀/寫,不在自定義ChannelHandler中做耗時操作。
  • 不把耗時操作放進 任務隊列。

本文從Reactor線程模型開始說起,到Netty如何用EventLoop實現Reactor線程模型。

然后對Netty4的線程模型優化做了詳細介紹,尤其是「無鎖串行化設計」。

最后從EventLoop線程模型出發,說明了日常開發中使用Netty4開發的最佳實踐。

希望大家能對EventLoop有全面的認識。

 

責任編輯:姜華 來源: 阿丸筆記
相關推薦

2022-09-29 15:39:10

服務器NettyReactor

2025-05-08 10:25:00

Netty網絡編程框架

2023-05-23 08:01:10

Netty網絡通信

2022-01-04 11:11:32

Redis單線程Reactor

2021-07-10 08:04:07

Reactor模式Netty

2024-10-24 20:48:04

Netty線程Java

2020-10-14 08:50:38

搞懂 Netty 線程

2022-03-06 12:15:38

NettyReactor線程

2022-03-10 07:58:12

ReactorNetty運轉架構

2022-03-04 08:10:35

NettyIO模型Reactor

2018-05-16 09:26:41

基線模型機器學習AI

2020-12-21 08:42:40

NettyByteBuf網絡技術

2024-05-31 08:10:58

Netty線程模型多路復用模型

2021-02-10 08:09:48

Netty網絡多路復用

2023-10-19 11:12:15

Netty代碼

2024-11-26 09:33:44

2024-12-26 00:46:25

機器學習LoRA訓練

2023-06-24 19:59:40

2023-12-05 17:44:24

reactor網絡

2024-04-18 09:34:28

Reactor項目異步編程
點贊
收藏

51CTO技術棧公眾號

国产99在线| 欧美 日韩 国产 成人 在线 91 | 亚洲国产国产亚洲一二三| 亚洲精品在线观看网站| 91免费视频网站在线观看| 成人jjav| 国产.精品.日韩.另类.中文.在线.播放| 91精品国产91| 国产精品成人69xxx免费视频| 亚洲图色一区二区三区| 91福利在线播放| 每日在线观看av| 欧美激情黑人| 久久久噜噜噜久久中文字幕色伊伊 | 丝袜美腿一区二区三区| 九九热精品在线| 久久国产柳州莫菁门| 91精品久久久久久综合五月天| 欧美视频综合| 制服诱惑一区二区| 久久成人免费视频| 91视频免费观看网站| 日韩三级网址| 欧美视频一区二区三区四区| 成人午夜免费在线| 在线日本中文字幕| 久久精品一级爱片| 久精品国产欧美| 午夜美女福利视频| 极品美女销魂一区二区三区免费| 日韩免费观看视频| 日韩三级一区二区三区| 久久久久电影| 最近2019中文免费高清视频观看www99| 中文文字幕文字幕高清| 亚洲三级av| 日韩欧美国产一二三区| 亚洲精品视频三区| 青青草国产一区二区三区| 91成人免费在线视频| 欧美亚洲精品一区二区| av丝袜在线| 香蕉影视欧美成人| 亚洲精品无码国产| 91在线三级| 香蕉av福利精品导航| 精品国偷自产一区二区三区| 在线观看三级视频| 亚洲一区二三区| 日本阿v视频在线观看| 免费不卡av| 亚洲3atv精品一区二区三区| 国产一区二区网| 小早川怜子影音先锋在线观看| 亚洲成人精品影院| 日韩人妻无码精品久久久不卡| 天堂av中文在线| 亚洲综合丁香婷婷六月香| 精品人妻人人做人人爽| 91精选在线| 一区二区三区日韩精品视频| 国产精品无码免费专区午夜| av中文字幕电影在线看| 五月婷婷激情综合网| 浮妇高潮喷白浆视频| 伊人久久在线| 欧美系列亚洲系列| 亚洲一区精品视频在线观看| 国内不卡的一区二区三区中文字幕 | 亚洲一区二区三区欧美| 免费大片黄在线观看视频网站| 中文字幕一区二区三区视频| 日韩视频一二三| www欧美xxxx| 精品久久久久人成| 999在线免费视频| 99国内精品久久久久| 欧美成人在线直播| 3d动漫精品啪啪一区二区下载| 国产伦精品一区二区三区千人斩| 中文字幕亚洲情99在线| 日本中文字幕免费在线观看| 亚洲巨乳在线| 国产精品一区二区三区成人| www久久久com| 久久久久久久精| 中文字幕在线乱| 不卡的av影片| 欧洲精品视频在线观看| 善良的小姨在线| www.国产精品一区| 一本色道久久88精品综合| 欧美人禽zoz0强交| 久久一区亚洲| 147欧美人体大胆444| 日韩精品一二| 一区二区三区在线视频免费| 欧美性大战久久久久xxx | 中文字幕在线三区| 色综合天天视频在线观看| 欧美性受xxxxxx黑人xyx性爽| 欧美一区二区三区久久| 久久夜色精品国产欧美乱| 亚洲天堂日韩av| 国产综合久久久久久鬼色| 久久96国产精品久久99软件| 黄色在线视频网站| 色天天综合色天天久久| 中文字幕亚洲日本| 久久神马影院| 欧美中文字幕在线| 亚洲精品久久久狠狠狠爱 | 日韩精品亚洲视频| 婷婷在线精品视频| 欧美aⅴ一区二区三区视频| 国产伦精品一区二区三毛| 男人和女人做事情在线视频网站免费观看 | 成人免费网站www网站高清| 欧美成人欧美edvon| 男人天堂资源网| 久久精品一区| 久久爱av电影| 丁香花在线观看完整版电影| 欧美男同性恋视频网站| av电影网站在线观看| 亚洲伊人观看| 精品视频一区二区三区四区| 中中文字幕av在线| 欧美一区二区免费观在线| 国产精品无码无卡无需播放器| 欧美专区18| 国产在线观看一区| 2020国产在线| 欧美精品一区二区三区四区| 亚洲色图综合区| 国产乱码一区二区三区| 国产精品久久成人免费观看| 全球中文成人在线| 日韩中文字幕视频在线| 日韩电影在线观看一区二区| 91免费在线看| 免费黄色福利视频| 天天躁日日躁狠狠躁欧美| 久久久久亚洲精品国产 | 亚洲欧洲在线播放| 中文字幕一区在线播放| 2021久久国产精品不只是精品| 成人黄色av片| 欧美尿孔扩张虐视频| 97国产一区二区精品久久呦| 少妇av在线播放| 午夜在线成人av| 日本japanese极品少妇| 午夜一级在线看亚洲| 欧美高清性xxxxhdvideosex| 97成人资源| 一区二区三区精品99久久| 这里只有精品国产| 国产精品久久久久久久久免费樱桃 | 国产精品一二一区| 国产欧美精品aaaaaa片| 国产精品网址| 欧美专区在线播放| 成人福利在线| 欧美一级黄色片| 日韩高清免费av| 国产午夜精品理论片a级大结局| 五月婷婷狠狠操| 91精品精品| 国产原创精品| 欧美日韩尤物久久| 久久伊人91精品综合网站| 精品人妻一区二区三区蜜桃| 亚洲国产日韩精品| 四虎国产精品成人免费入口| 蜜桃视频一区二区三区 | 一级二级黄色片| 国产专区欧美精品| 免费观看国产精品视频| 黑丝美女一区二区| 99re在线观看| 性欧美hd调教| 美女精品视频一区| 色吊丝在线永久观看最新版本| 欧美在线视频日韩| 免费毛片在线播放免费| 久久久久九九视频| xxx中文字幕| 久久久成人网| 黑人巨茎大战欧美白妇 | 丰满女人性猛交| 卡通动漫精品一区二区三区| 国产精品香蕉在线观看| 偷拍视频一区二区| 欧美调教sm| 久久激情视频久久| 天堂а√在线8种子蜜桃视频| 欧美日韩免费观看一区二区三区 | 亚洲美女一区| 制服丝袜综合日韩欧美| 欧美1区2区3区4区| 91免费国产视频| 欧美xxxxxx| 欧美高清视频免费观看| eeuss影院www在线观看| 亚洲精品一区二区三区蜜桃下载 | 成人夜色视频网站在线观看| 黄色三级视频片| 亚洲午夜久久久久久尤物| 亚洲伊人婷婷| 免费看日本一区二区| 97视频中文字幕| 久久久久黄色| 欧洲s码亚洲m码精品一区| 污视频在线免费观看网站| 在线观看欧美日韩国产| 国产精品国产高清国产| 欧美成人精品1314www| 亚洲综合精品在线| 91国产免费观看| 日韩色图在线观看| 亚洲福利视频一区二区| 日本在线一级片| 国产精品不卡视频| 黄色av免费播放| 国产午夜亚洲精品午夜鲁丝片| 蜜桃精品成人影片| 99re这里都是精品| 国产精品无码在线| 成人免费看的视频| 动漫av在线免费观看| 激情图片小说一区| 波多野结衣国产精品| 视频一区免费在线观看| 久久久久人妻精品一区三寸| 亚洲看片一区| 欧美日本视频在线观看| 尤物网精品视频| 国产精品一线二线三线| 亚洲另类视频| 91猫先生在线| 亚洲中字在线| 亚洲欧洲日产国码无码久久99 | 自拍视频在线观看一区二区| 黄色片在线观看免费| 国产片一区二区三区| 一区二区三区伦理片| 欧美激情综合五月色丁香小说| 公肉吊粗大爽色翁浪妇视频| 国产日韩在线不卡| 一级黄色录像毛片| 中文字幕一区在线| 69xx绿帽三人行| 亚洲永久精品国产| 日韩欧美亚洲一区二区三区| 高跟丝袜欧美一区| 中文字幕在线日本| 欧美日韩国产一区| 国产精品一级视频| 欧美岛国在线观看| 天天躁日日躁狠狠躁伊人| 亚洲另类激情图| 国产黄色免费在线观看| 日韩在线免费观看视频| 二区在线播放| 午夜精品在线视频| 日本综合字幕| 成人国产精品日本在线| 亚洲精品福利| 欧美精品尤物在线| 日韩一区欧美| 2019日韩中文字幕mv| 国产视频亚洲| 999这里有精品| 成人免费视频一区| 手机看片日韩av| 亚洲色欲色欲www在线观看| 日本特黄特色aaa大片免费| 日本乱人伦一区| av网站在线免费看| 亚洲精品视频在线观看视频| 日韩在线资源| 国模私拍视频一区| 国产成人精品一区二区三区视频| 国产精品视频精品视频| 爱爱精品视频| 丝袜美腿玉足3d专区一区| 欧美日韩综合| 国产精品人人爽人人爽| 丰满放荡岳乱妇91ww| 中文字幕免费高清| 一片黄亚洲嫩模| 青青草视频在线观看免费| 日韩免费视频一区二区| 国自产拍在线网站网址视频| 久久这里有精品视频| 97成人资源| 国产伦精品一区二区三区照片91| 欧美在线电影| 777久久久精品一区二区三区| 精品一区在线看| 37p粉嫩大胆色噜噜噜| 亚洲欧美国产毛片在线| 日韩欧美国产另类| 亚洲大胆美女视频| 二区三区四区高清视频在线观看| 欧美孕妇毛茸茸xxxx| 97视频一区| 正在播放一区| 日本成人中文字幕| 好吊日免费视频| 亚洲国产视频网站| 99热这里只有精品在线观看| 国产亚洲精品久久久久久| 美女在线视频免费| 国产精品国产三级欧美二区| 97久久夜色精品国产| 农村妇女精品一二区| 成人激情校园春色| 青青草国产在线观看| 欧美日韩视频在线第一区| 欧美成熟毛茸茸| 性欧美在线看片a免费观看| 日韩免费成人| 特级黄色录像片| 乱一区二区av| 国产综合精品久久久久成人av| 精品成人乱色一区二区| 欧美一级在线免费观看| 欧美日韩成人免费| 视频一区视频二区欧美| 欧美 日韩 国产 在线观看| 秋霞电影网一区二区| 亚欧精品视频一区二区三区| 在线视频亚洲一区| 国产一级片在线| 国产91九色视频| 国产在线日韩精品| 久久久久久久片| 国产精品乱码一区二区三区软件| 做爰无遮挡三级| 日韩视频中文字幕| 天堂综合在线播放| 青春草在线视频免费观看| 激情文学综合插| 欧美人禽zoz0强交| 欧美成人三级在线| 美女高潮在线观看| 欧美日韩精品免费观看| 日本网站在线观看一区二区三区| 中文字幕有码在线播放| 欧美天堂一区二区三区| 在线免费看av| 91观看网站| 亚洲国产黄色| 久久精品无码一区| 色综合激情五月| 在线观看黄av| 亚洲a在线观看| 伊人久久成人| 爱爱免费小视频| 欧美性色黄大片手机版| 麻豆传媒在线观看| 国产精品v欧美精品v日韩| 国产精品女主播一区二区三区| 国产人妻大战黑人20p| 欧美日韩国产成人在线免费| а√资源新版在线天堂| 国产乱码一区| 日韩和的一区二区| 国产精品免费人成网站酒店| 精品国产一区二区三区忘忧草| 999福利在线视频| 日本一区二区免费看| 精品制服美女丁香| 精品无码人妻一区二区三| 亚洲女成人图区| av在线播放一区二区| 国产二区视频在线| 国产欧美一区二区三区沐欲| 99热这里只有精品在线| 国外色69视频在线观看| 日韩av在线中文字幕| 国产成人av免费观看| 日韩欧美在线国产| 黄色在线播放网站| 蜜桃视频在线观看成人| 精久久久久久久久久久| 亚洲国产成人精品激情在线| 日韩小视频在线| 秋霞影视一区二区三区| 午夜激情影院在线观看| 精品久久久久久久久久久久久久 | а√中文在线资源库| 日韩av三级在线观看| 欧美一区综合| 一级黄色毛毛片| 日韩av中文字幕在线播放| 9999精品视频| wwwwww.色|