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

框架篇:Linux網(wǎng)絡I/O+Reactor模型

系統(tǒng) Linux
網(wǎng)絡I/O,可以理解為網(wǎng)絡上的數(shù)據(jù)流。通常我們會基于socket與遠端建立一條TCP或者UDP通道,然后進行讀寫。

[[354886]]

本文轉(zhuǎn)載自微信公眾號「潛行前行」,作者cscw 。轉(zhuǎn)載本文請聯(lián)系潛行前行公眾號。   

前言

網(wǎng)絡I/O,可以理解為網(wǎng)絡上的數(shù)據(jù)流。通常我們會基于socket與遠端建立一條TCP或者UDP通道,然后進行讀寫。單個socket時,使用一個線程即可高效處理;然而如果是10K個socket連接,或者更多,我們?nèi)绾巫龅礁咝阅芴幚?

  • 基本概念介紹
  • 網(wǎng)絡I/O的讀寫過程
  • linux下的五種網(wǎng)絡I/O模型
  • 多路復用I/O深入理解一波
  • Reactor模型
  • Proacotr模型

基本概念介紹

  • 進程(線程)切換

所有系統(tǒng)都有調(diào)度進程的能力,它可以掛起一個當前正在運行的進程,并恢復之前掛起的進程

  • 進程(線程)的阻塞

運行中的進程,有時會等待其他事件的執(zhí)行完成,比如等待鎖,請求I/O的讀寫;進程在等待過程會被系統(tǒng)自動執(zhí)行阻塞,此時進程不占用CPU

  • 文件描述符

在Linux,文件描述符是一個用于表述指向文件引用的抽象化概念,它是一個非負整數(shù)。當程序打開一個現(xiàn)有文件或者創(chuàng)建一個新文件時,內(nèi)核向進程返回一個文件描述符

  • linux信號處理

Linux進程運行中可以接受來自系統(tǒng)或者進程的信號值,然后根據(jù)信號值去運行相應捕捉函數(shù);信號相當于是硬件中斷的軟件模擬

在零拷貝機制篇章已介紹過 用戶空間和內(nèi)核空間和緩沖區(qū),這里就省略了

網(wǎng)絡IO的讀寫過程

  • 當在用戶空間發(fā)起對socket套接字的讀操作時,會導致上下文切換,用戶進程阻塞(R1)等待網(wǎng)絡數(shù)據(jù)流到來,從網(wǎng)卡復制到內(nèi)核;(R2)然后從內(nèi)核緩沖區(qū)向用戶進程緩沖區(qū)復制。此時進程切換恢復,處理拿到的數(shù)據(jù)
  • 這里我們給socket讀操作的第一階段起個別名R1,第二階段稱為R2
  • 當在用戶空間發(fā)起對socket的send操作時,導致上下文切換,用戶進程阻塞等待(1)數(shù)據(jù)從用戶進程緩沖區(qū)復制到內(nèi)核緩沖區(qū)。數(shù)據(jù)copy完成,此時進程切換恢復

linux五種網(wǎng)絡IO模型

阻塞式I/O (blocking IO)

  1. ssize_t recvfrom(int sockfd,void *buf,size_t len,unsigned int flags, struct sockaddr *from,socket_t *fromlen); 

 

  • 最基礎的I/O模型就是阻塞I/O模型,也是最簡單的模型。所有的操作都是順序執(zhí)行的
  • 阻塞IO模型中,用戶空間的應用程序執(zhí)行一個系統(tǒng)調(diào)用(recvform),會導致應用程序被阻塞,直到內(nèi)核緩沖區(qū)的數(shù)據(jù)準備好,并且將數(shù)據(jù)從內(nèi)核復制到用戶進程。最后進程才被系統(tǒng)喚醒處理數(shù)據(jù)
  • 在R1、R2連續(xù)兩個階段,整個進程都被阻塞

非阻塞式I/O (nonblocking IO)

 

  • 非阻塞IO也是一種同步IO。它是基于輪詢(polling)機制實現(xiàn),在這種模型中,套接字是以非阻塞的形式打開的。就是說I/O操作不會立即完成,但是I/O操作會返回一個錯誤代碼(EWOULDBLOCK),提示操作未完成
  • 輪詢檢查內(nèi)核數(shù)據(jù),如果數(shù)據(jù)未準備好,則返回EWOULDBLOCK。進程再繼續(xù)發(fā)起recvfrom調(diào)用,當然你可以暫停去做其他事
  • 直到內(nèi)核數(shù)據(jù)準備好,再拷貝數(shù)據(jù)到用戶空間,然后進程拿到非錯誤碼數(shù)據(jù),接著進行數(shù)據(jù)處理。需要注意,拷貝數(shù)據(jù)整個過程,進程仍然是屬于阻塞的狀態(tài)
  • 進程在R2階段阻塞,雖然在R1階段沒有被阻塞,但是需要不斷輪詢

多路復用I/O (IO multiplexing)

 

  • 一般后端服務都會存在大量的socket連接,如果一次能查詢多個套接字的讀寫狀態(tài),若有任意一個準備好,那就去處理它,效率會高很多。這就是“I/O多路復用”,多路是指多個socket套接字,復用是指復用同一個進程
  • linux提供了select、poll、epoll等多路復用I/O的實現(xiàn)方式
  • select或poll、epoll是阻塞調(diào)用
  • 與阻塞IO不同,select不會等到socket數(shù)據(jù)全部到達再處理,而是有了一部分socket數(shù)據(jù)準備好就會恢復用戶進程來處理。怎么知道有一部分數(shù)據(jù)在內(nèi)核準備好了呢?答案:交給了系統(tǒng)系統(tǒng)處理吧
  • 進程在R1、R2階段也是阻塞;不過在R1階段有個技巧,在多進程、多線程編程的環(huán)境下,我們可以只分配一個進程(線程)去阻塞調(diào)用select,其他線程不就可以解放了嗎

信號驅(qū)動式I/O (SIGIO)

 

  • 需要提供一個信號捕捉函數(shù),并和socket套接字關聯(lián);發(fā)起sigaction調(diào)用之后進程就能解放去處理其他事
  • 當數(shù)據(jù)在內(nèi)核準備好后,進程會收到一個SIGIO信號,繼而中斷去運行信號捕捉函數(shù),調(diào)用recvfrom把數(shù)據(jù)從內(nèi)核讀取到用戶空間,再處理數(shù)據(jù)
  • 可以看出用戶進程是不會阻塞在R1階段,但R2還是會阻塞等待

異步IO (POSIX的aio_系列函數(shù))

 

  • 相對同步IO,異步IO在用戶進程發(fā)起異步讀(aio_read)系統(tǒng)調(diào)用之后,無論內(nèi)核緩沖區(qū)數(shù)據(jù)是否準備好,都不會阻塞當前進程;在aio_read系統(tǒng)調(diào)用返回后進程就可以處理其他邏輯
  • socket數(shù)據(jù)在內(nèi)核就緒時,系統(tǒng)直接把數(shù)據(jù)從內(nèi)核復制到用戶空間,然后再使用信號通知用戶進程
  • R1、R2兩階段時進程都是非阻塞的

多路復用IO深入理解一波

select

  1. int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 

1)使用copy_from_user從用戶空間拷貝fd_set到內(nèi)核空間

2)注冊回調(diào)函數(shù)__pollwait

3)遍歷所有fd,調(diào)用其對應的poll方法(對于socket,這個poll方法是sock_poll,sock_poll根據(jù)情況會調(diào)用到tcp_poll,udp_poll或者datagram_poll)

4)以tcp_poll為例,其核心實現(xiàn)就是__pollwait,也就是上面注冊的回調(diào)函數(shù)

5)__pollwait的主要工作就是把current(當前進程)掛到設備的等待隊列中,不同的設備有不同的等待隊列,對于tcp_poll來說,其等待隊列是sk->sk_sleep(注意把進程掛到等待隊列中并不代表進程已經(jīng)睡眠了)。在設備收到一條消息(網(wǎng)絡設備)或填寫完文件數(shù)據(jù)(磁盤設備)后,會喚醒設備等待隊列上睡眠的進程,這時current便被喚醒了

6)poll方法返回時會返回一個描述讀寫操作是否就緒的mask掩碼,根據(jù)這個mask掩碼給fd_set賦值

7)如果遍歷完所有的fd,還沒有返回一個可讀寫的mask掩碼,則會調(diào)用schedule_timeout是調(diào)用select的進程(也就是current)進入睡眠

8) 當設備驅(qū)動發(fā)生自身資源可讀寫后,會喚醒其等待隊列上睡眠的進程。如果超過一定的超時時間(timeout指定),還是沒人喚醒,則調(diào)用select的進程會重新被喚醒獲得CPU,進而重新遍歷fd,判斷有沒有就緒的fd

9)把fd_set從內(nèi)核空間拷貝到用戶空間

select的缺點

每次調(diào)用select,都需要把fd集合從用戶態(tài)拷貝到內(nèi)核態(tài),這個開銷在fd很多時會很大

同時每次調(diào)用select都需要在內(nèi)核遍歷傳遞進來的所有fd,這個開銷在fd很多時也很大

select支持的文件描述符數(shù)量太小了,默認是1024

epoll

  1. int epoll_create(int size);   
  2. int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);   
  3. int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout);  
  • 調(diào)用epoll_create,會在內(nèi)核cache里建個紅黑樹用于存儲以后epoll_ctl傳來的socket,同時也會再建立一個rdllist雙向鏈表用于存儲準備就緒的事件。當epoll_wait調(diào)用時,僅查看這個rdllist雙向鏈表數(shù)據(jù)即可
  • epoll_ctl在向epoll對象中添加、修改、刪除事件時,是在rbr紅黑樹中操作的,非常快
  • 添加到epoll中的事件會與設備(如網(wǎng)卡)建立回調(diào)關系,設備上相應事件的發(fā)生時會調(diào)用回調(diào)方法,把事件加進rdllist雙向鏈表中;這個回調(diào)方法在內(nèi)核中叫做ep_poll_callback

epoll的兩種觸發(fā)模式

epoll有EPOLLLT和EPOLLET兩種觸發(fā)模式,LT是默認的模式,ET是“高速”模式(只支持no-block socket)

  • LT(水平觸發(fā))模式下,只要這個文件描述符還有數(shù)據(jù)可讀,每次epoll_wait都會觸發(fā)它的讀事件
  • ET(邊緣觸發(fā))模式下,檢測到有I/O事件時,通過 epoll_wait 調(diào)用會得到有事件通知的文件描述符,對于文件描述符,如可讀,則必須將該文件描述符一直讀到空(或者返回EWOULDBLOCK),否則下次的epoll_wait不會觸發(fā)該事件

epoll相比select的優(yōu)點

解決select三個缺點

  • 對于第一個缺點:epoll的解決方案在epoll_ctl函數(shù)中。每次注冊新的事件到epoll句柄中時(在epoll_ctl中指定EPOLL_CTL_ADD),會把所有的fd拷貝進內(nèi)核,而不是在epoll_wait的時候重復拷貝。epoll保證了每個fd在整個過程中只會拷貝一次(epoll_wait不需要復制)
  • 對于第二個缺點:epoll為每個fd指定一個回調(diào)函數(shù),當設備就緒,喚醒等待隊列上的等待者時,就會調(diào)用這個回調(diào)函數(shù),而這個回調(diào)函數(shù)會把就緒的fd加入一個就緒鏈表。epoll_wait的工作實際上就是在這個就緒鏈表中查看有沒有就緒的fd(不需要遍歷)
  • 對于第三個缺點:epoll沒有這個限制,它所支持的FD上限是最大可以打開文件的數(shù)目,這個數(shù)字一般遠大于2048,舉個例子,在1GB內(nèi)存的機器上大約是10萬左右,一般來說這個數(shù)目和系統(tǒng)內(nèi)存關系很大

epoll的高性能

  • epoll使用了紅黑樹來保存需要監(jiān)聽的文件描述符事件,epoll_ctl增刪改操作快速
  • epoll不需要遍歷就能獲取就緒fd,直接返回就緒鏈表即可
  • linux2.6 之后使用了mmap技術,數(shù)據(jù)不在需要從內(nèi)核復制到用戶空間,零拷貝

關于epoll的IO模型是同步異步的疑問

概念定義

  • 同步I/O操作:導致請求進程阻塞,直到I/O操作完成
  • 異步I/O操作:不導致請求進程阻塞,異步只用處理I/O操作完成后的通知,并不主動讀寫數(shù)據(jù),由系統(tǒng)內(nèi)核完成數(shù)據(jù)的讀寫
  • 阻塞,非阻塞:進程/線程要訪問的數(shù)據(jù)是否就緒,進程/線程是否需要等待

異步IO的概念是要求無阻塞I/O調(diào)用。前面有介紹到I/O操作分兩階段:R1等待數(shù)據(jù)準備好。R2從內(nèi)核到進程拷貝數(shù)據(jù)。雖然epoll在2.6內(nèi)核之后采用mmap機制,使得其在R2階段不需要復制,但是它在R1還是阻塞的。因此歸類到同步IO

Reactor模型

Reactor的中心思想是將所有要處理的I/O事件注冊到一個中心I/O多路復用器上,同時主線程/進程阻塞在多路復用器上;一旦有I/O事件到來或是準備就緒,多路復用器返回,并將事先注冊的相應I/O事件分發(fā)到對應的處理器中

相關概念介紹:

  • 事件:就是狀態(tài);比如:讀就緒事件指的是我們可以從內(nèi)核讀取數(shù)據(jù)的狀態(tài)
  • 事件分離器:一般會把事件的等待發(fā)生交給epoll、select;而事件的到來是隨機,異步的,所以需要循環(huán)調(diào)用epoll,在框架里對應封裝起來的模塊就是事件分離器(簡單理解為對epoll封裝)
  • 事件處理器:事件發(fā)生后需要進程或線程去處理,這個處理者就是事件處理器,一般和事件分離器是不同的線程

Reactor的一般流程

  • 1)應用程序在事件分離器注冊讀寫就緒事件和讀寫就緒事件處理器
  • 2)事件分離器等待讀寫就緒事件發(fā)生
  • 3)讀寫就緒事件發(fā)生,激活事件分離器,分離器調(diào)用讀寫就緒事件處理器
  • 4)事件處理器先從內(nèi)核把數(shù)據(jù)讀取到用戶空間,然后再處理數(shù)據(jù)

 

單線程 + Reactor

 

多線程 + Reactor

 

多線程 + 多個Reactor

 

Proactor模型的一般流程

1)應用程序在事件分離器注冊讀完成事件和讀完成事件處理器,并向系統(tǒng)發(fā)出異步讀請求

2)事件分離器等待讀事件的完成

3)在分離器等待過程中,系統(tǒng)利用并行的內(nèi)核線程執(zhí)行實際的讀操作,并將數(shù)據(jù)復制進程緩沖區(qū),最后通知事件分離器讀完成到來

4)事件分離器監(jiān)聽到讀完成事件,激活讀完成事件的處理器

5)讀完成事件處理器直接處理用戶進程緩沖區(qū)中的數(shù)據(jù)

 

Proactor和Reactor的區(qū)別

Proactor是基于異步I/O的概念,而Reactor一般則是基于多路復用I/O的概念

Proactor不需要把數(shù)據(jù)從內(nèi)核復制到用戶空間,這步由系統(tǒng)完成

歡迎指正文中錯誤

參考文章

聊聊Linux 五種IO模型[1]

網(wǎng)絡io模型[2]

網(wǎng)絡IO[3]

5種網(wǎng)絡IO模型[4]

epoll原理詳解及epoll反應堆模型[5]

參考資料

 

[1]聊聊Linux 五種IO模型: https://www.jianshu.com/p/486b0965c296[2]網(wǎng)絡io模型: https://www.jianshu.com/p/a95bcb116765[3]網(wǎng)絡IO: https://www.cnblogs.com/hesper/p/11547263.html[4]5種網(wǎng)絡IO模型: https://www.cnblogs.com/findumars/p/6361627.html[5]epoll原理詳解及epoll反應堆模型: https://blog.csdn.net/daaikuaichuan/article/details/83862311

 

責任編輯:武曉燕 來源: 潛行前行
相關推薦

2020-06-03 17:30:42

LinuxIO

2010-06-25 09:47:29

Linux系統(tǒng)監(jiān)控

2022-01-04 11:11:32

Redis單線程Reactor

2021-02-10 08:09:48

Netty網(wǎng)絡多路復用

2014-07-28 16:47:41

linux性能

2021-05-17 11:14:36

網(wǎng)絡請求ajaxpromise

2023-12-05 17:44:24

reactor網(wǎng)絡

2020-10-13 07:51:03

五種IO模型

2011-01-14 09:25:28

LinuxIO機制

2021-01-19 06:43:10

Netty框架網(wǎng)絡技術

2021-10-13 06:49:15

網(wǎng)絡 IO

2025-07-14 00:20:00

2018-10-08 15:22:36

IO模型

2019-09-12 08:58:26

LinuxUNIX操作系統(tǒng)

2017-01-19 19:14:20

Linux重定向命令

2021-02-22 17:06:58

Linux改動代碼

2025-07-08 02:55:00

2021-11-08 17:03:13

IO模型

2017-03-01 12:36:15

Linux驅(qū)動技術內(nèi)存

2017-03-25 21:33:33

Linux調(diào)度器
點贊
收藏

51CTO技術棧公眾號

国产a级黄色大片| 国产精品久久久久久久av大片| 伊人成人免费视频| 国产羞羞视频在线播放| 久久综合色播五月| 国产精品久久久久久亚洲影视| 日韩欧美国产成人精品免费| 国产精品qvod| 91电影在线观看| 超碰10000| 欧美欧美欧美| 懂色av一区二区三区免费看| 日韩美女免费线视频| 国产又黄又爽又无遮挡| 香蕉久久99| 欧美一级电影网站| 青青在线视频观看| 50度灰在线| 欧美激情在线看| 999国内精品视频在线| 天堂网中文字幕| 欧美另类视频| 日韩视频免费观看| 人妻一区二区视频| 狠狠久久伊人| 欧美一级生活片| 亚洲xxxx2d动漫1| 乱人伦视频在线| 亚洲黄色片在线观看| 亚洲国产欧洲综合997久久| 亚洲精品久久久久久久久久久久久久| 奇米在线7777在线精品| 欧美亚洲激情视频| 国产亚洲精品久久久久久打不开 | a级网站在线播放| 国产丝袜美腿一区二区三区| 黄色国产精品一区二区三区| 性色av蜜臀av| 国产一区 二区 三区一级| 国产精品久久一| 日韩黄色a级片| 欧美精品91| 久久久国产精品x99av | 韩国av在线免费观看| 国产在线国偷精品免费看| 国产精品成人一区二区| 黑人精品无码一区二区三区AV| 欧美性久久久| 欧美大片免费观看| 好吊色视频在线观看| 国产精品久久久久久影院8一贰佰| 国产亚洲人成网站在线观看| 蜜桃av免费看| 国产一区二区三区四区大秀| 亚洲欧美中文日韩在线v日本| 亚洲第一黄色网址| 日本福利一区| 亚洲精品视频免费| 亚洲精品国产一区黑色丝袜| 国产精品一区二区99| 亚洲欧美制服丝袜| 丝袜美腿中文字幕| 免费欧美一区| 在线观看欧美日韩| 国产三级黄色片| 水蜜桃精品av一区二区| 深夜福利日韩在线看| 性少妇xx生活| 性欧美欧美巨大69| 久久高清视频免费| 国产一级一片免费播放放a| 亚洲第一网站| 日本精品久久久| 青青视频在线免费观看| 免费精品视频在线| 91在线精品播放| 亚洲女人18毛片水真多| 91丨porny丨在线| 欧美一区视久久| 求av网址在线观看| 亚洲一区日韩精品中文字幕| 国产综合av在线| 91tv亚洲精品香蕉国产一区| 欧美乱熟臀69xxxxxx| 一区二区三区人妻| 色狼人综合干| 最新国产成人av网站网址麻豆| 少妇被躁爽到高潮无码文| 亚洲夜间福利| 国产精品免费久久久久久| 国产一区二区麻豆| 成人国产精品免费观看动漫| 午夜精品一区二区在线观看| 青春草视频在线| 在线精品亚洲一区二区不卡| 在线观看欧美一区二区| 亚洲人成亚洲精品| 欧美日韩第一页| 中文字幕黄色片| 国产乱淫av一区二区三区| 精品国产一区二区三区四区精华| 成全电影播放在线观看国语| 亚洲国产视频直播| 99视频在线视频| 成人精品毛片| www.日韩系列| 五月婷婷视频在线| 国产九色精品成人porny| 欧美一区二区三区在线播放| 色呦呦在线免费观看| 欧洲中文字幕精品| 中文成人无字幕乱码精品区| 外国成人免费视频| 国产成人av在线播放| 亚洲xxx在线| ...中文天堂在线一区| av7777777| 97视频一区| 久热爱精品视频线路一| 伊人网视频在线| 久久伊人蜜桃av一区二区| 菠萝蜜视频在线观看入口| 粉嫩av一区二区三区四区五区 | √天堂资源地址在线官网| 欧美日韩国产一中文字不卡| 中文字幕第22页| 久久国产电影| 国产国语videosex另类| 五月天福利视频| 亚洲国产精品久久一线不卡| 亚洲综合伊人久久| 欧美xxxxx视频| 国产精品激情av电影在线观看 | 欧美激情视频在线| 99在线无码精品入口| 国产精品妹子av| 亚洲精品一二三四五区| 国内精品久久久久久99蜜桃| 日本午夜精品理论片a级appf发布| 免费激情视频网站| 一区二区三区精品在线观看| 香蕉视频xxxx| 午夜精品网站| 成人精品一二区| 色综合999| 精品福利一区二区三区免费视频| 少妇影院在线观看| 国产精品一卡二卡| 日b视频免费观看| 国产精品45p| 国外视频精品毛片| www.av日韩| 亚洲观看高清完整版在线观看| 国产大学生av| 亚洲另类自拍| 欧美一区1区三区3区公司 | 欧美成人三区| 在线不卡欧美精品一区二区三区| 日本一二三区在线观看| 国产在线精品国自产拍免费| 欧美高清中文字幕| 加勒比中文字幕精品| 91精品国产91久久久久久吃药| 人人妻人人玩人人澡人人爽| 欧美日韩国产专区| 欧美黄色激情视频| 久久国产麻豆精品| 青青草原网站在线观看| 高清精品视频| 日韩av电影国产| 成人18在线| 日韩视频在线观看一区二区| 日韩乱码一区二区| 久久久久国产精品免费免费搜索| jizz欧美性11| 欧美日一区二区在线观看 | 亚洲在线观看网站| 黄色成人在线网址| 久久免费一区| 一区二区三区无毛| 久久久久久久影院| 美女欧美视频在线观看免费 | 丰满饥渴老女人hd| 一本色道久久综合亚洲精品高清 | 8x8x8国产精品| 久久精品欧美一区二区| 久久久国产综合精品女国产盗摄| www午夜视频| 亚洲高清不卡| 亚洲亚洲精品三区日韩精品在线视频| 日本在线成人| 国产成人a亚洲精品| 在线观看男女av免费网址| 亚洲精品www| 国产精品无码在线播放| 天天综合日日夜夜精品| 中文字幕无码日韩专区免费| av在线播放不卡| 97超碰成人在线| 中国女人久久久| 成人免费看片视频在线观看| 日本天堂一区| 91久久精品www人人做人人爽 | 欧美午夜寂寞影院| 久久网中文字幕| 欧美国产一区在线| 大乳护士喂奶hd| 国产一区二三区| 日日噜噜噜噜久久久精品毛片| 99精品视频免费观看| 青少年xxxxx性开放hg| 综合综合综合综合综合网| 亚洲一区二区三区在线视频| 本网站久久精品| 91精品国产高清久久久久久| 国产区在线观看| 亚洲天堂男人的天堂| 免费国产精品视频| 日韩一区二区三| 伊人久久国产精品| 在线一区二区三区做爰视频网站| 国产午夜小视频| 亚洲精品中文字幕在线观看| 国产一二三四视频| 国产农村妇女精品| 国产精品毛片一区二区| 成人av午夜影院| 国产综合内射日韩久| 国产精品综合二区| 做a视频在线观看| 美女视频一区二区| 亚洲欧美日韩一级| 三级久久三级久久久| 国产a级一级片| a91a精品视频在线观看| 欧美精品一区二区三区三州| 欧美日韩精品| 超级碰在线观看| 中文字幕一区二区三区乱码图片 | 中文天堂资源在线| 国产午夜久久久久| 欧美色图亚洲激情| 久久综合色婷婷| mm131丰满少妇人体欣赏图| 91免费在线视频观看| 中文字幕在线播放一区| 不卡av在线网| 强伦人妻一区二区三区| 26uuu精品一区二区三区四区在线| 7788色淫网站小说| 97久久超碰国产精品电影| 免费成人蒂法网站| 久久综合网色—综合色88| 扒开jk护士狂揉免费| 久久久一区二区三区捆绑**| 波多野结衣av在线观看| 国产欧美一区二区三区鸳鸯浴| 色婷婷在线影院| 中文字幕免费观看一区| 四虎884aa成人精品| 亚洲精品免费视频| 国产真实夫妇交换视频| 岛国av在线不卡| 好吊色在线视频| 欧美日韩精品综合在线| 国产夫绿帽单男3p精品视频| 精品免费日韩av| 三级理论午夜在线观看| 亚洲三级 欧美三级| 2017亚洲天堂1024| 久久国产精品久久久久| av在线加勒比| 国产精品xxxxx| 警花av一区二区三区| 国产精品一级久久久| 国产中文精品久高清在线不| 麻豆md0077饥渴少妇| 在线观看视频免费一区二区三区| www.亚洲天堂网| 美腿丝袜在线亚洲一区| 亚洲一区二区图片| 99久久精品免费观看| 亚洲AV无码成人精品区明星换面| 综合网在线视频| 欧美精品亚洲精品日韩精品| 欧美午夜不卡视频| 草逼视频免费看| 亚洲欧美在线x视频| 黄色成年人视频在线观看| 97超碰色婷婷| 自拍偷拍亚洲| 欧美黑人xxxxx| 亚洲精品网址| 熟女人妇 成熟妇女系列视频| 精品一区二区三区在线播放视频| 亚洲一区二区三区综合| 国产精品不卡一区| 五月天综合激情| 3d动漫精品啪啪一区二区竹菊| 亚洲 小说区 图片区 都市| zzjj国产精品一区二区| 亚洲十八**毛片| 2019国产精品视频| 精品久久久久久久久久久下田| 一二三在线视频| 蜜臀91精品一区二区三区| 中文字幕精品视频在线| 亚洲日本韩国一区| 久久精品五月天| 亚洲电影免费观看高清完整版在线观看| 一区二区三区视频网站| 7777免费精品视频| 精品国产一区二区三区2021| 欧美一区少妇| 国产视频亚洲| 中国男女全黄大片| 亚洲三级免费观看| 蜜臀99久久精品久久久久小说| 亚洲大胆人体视频| 福利视频在线| 国产日韩欧美在线播放| 欧美美乳视频| 女人天堂av手机在线| 国产成人av网站| 91在线播放观看| 欧美二区乱c少妇| 午夜免费福利在线观看| 国产精品国产三级国产aⅴ浪潮| 欧美黄色网视频| 日韩欧美不卡在线| 国产成人免费视频网站| 久久国产高清视频| 欧美日韩在线精品一区二区三区激情| 青青青手机在线视频观看| 久久久免费电影| 国产精品115| 69sex久久精品国产麻豆| 国产成人午夜片在线观看高清观看| 久草福利资源在线| 在线不卡的av| 日本不卡不卡| 国产日韩欧美视频在线| 99精品一区| 亚洲国产欧美91| 亚洲综合网站在线观看| 亚洲黄色在线免费观看| 欧美激情视频网| 精品三级av| 欧美黄色免费影院| 国产夜色精品一区二区av| 欧美性猛交xxxx乱大交hd| 在线精品国产成人综合| 全球最大av网站久久| 亚洲欧美电影在线观看| 久久99国产精品尤物| 午夜剧场免费在线观看| 精品久久久三级丝袜| 九色porny视频在线观看| 蜜桃网站成人| 奇米在线7777在线精品| 秋霞欧美一区二区三区视频免费| 欧美日本国产视频| a在线免费观看| 好吊色欧美一区二区三区视频| 亚洲免费综合| 日韩av片在线免费观看| 欧美一区二区三区不卡| missav|免费高清av在线看| 精品人伦一区二区三区| 老司机精品久久| 亚洲欧洲综合网| 亚洲精品在线免费播放| 中文字幕在线直播| 亚洲一区二区四区| 成人性生交大片免费看中文网站| 亚洲不卡视频在线观看| 日韩亚洲精品视频| 亚洲高清在线一区| 日韩少妇内射免费播放| 欧美高清在线精品一区| 超碰在线播放97| 国产99视频在线观看| 午夜片欧美伦| www.久久av| 欧美一区二区久久| 成人欧美大片| 国产日韩第一页| 久久综合成人精品亚洲另类欧美 | 日韩精品影音先锋| 91av亚洲| av在线免费观看国产| 久久精品视频一区二区三区| 国产婷婷在线视频| 日韩免费av片在线观看| 欧美特黄一级| 亚洲毛片亚洲毛片亚洲毛片| 亚洲精品一线二线三线| 欧美成人毛片| 免费欧美一级视频| 亚洲日本在线a|