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

memcached源碼閱讀筆記

開發(fā) 項目管理
閱讀memcached最好有l(wèi)ibevent 基礎,memcached是基于libevent 構建起來的。通由libevent 提供的事件驅動機制觸發(fā) memcached中的IO事件。

閱讀 memcached ***有 libevent 基礎,memcached 是基于libevent 構建起來的。通由 libevent 提供的事件驅動機制觸發(fā) memcached 中的 IO 事件。

個人認為,閱讀源碼的起初最忌鉆牛角尖,如頭文件里天花亂墜的結構體到底有什么用。源文件里稀里嘩啦的函數(shù)是做什么的。剛開始并沒必要事無巨細弄清楚頭文件每個類型定義的具體用途;很可能那些是不緊要的工具函數(shù),知道他的功能和用法就沒他事了。

來看 memcached 內部做了什么事情。memcached 是用 c 語言實現(xiàn),必須有一個入口函數(shù)main(),memcached 的生命從這里開始。

初始化過程

建立并初始化 main_base,即主線程的事件中心,這是 libevent 里面的概念,可以把它理解為事件分發(fā)中心。

建立并初始化 memcached 內部容器數(shù)據結構。

建立并初始化空閑連接結構體數(shù)組。

建立并初始化線程結構數(shù)組,指定每個線程的入口函數(shù)是worker_libevent(),并創(chuàng)建工作線程。從worder_libevent()的實現(xiàn)來看,工作線程都會調用event_base_loop()進入自己的事件循環(huán)。

根據 memcached 配置,開啟以下兩種服務模式中的一種:

以 UNIX 域套接字的方式接受客戶的請求
以 TCP/UDP 套接字的方式接受客戶的請求
memcached 有可配置的兩種模式: UNIX 域套接字和 TCP/UDP,允許客戶端以兩種方式向 memcached 發(fā)起請求??蛻舳撕头掌髟谕粋€主機上的情況下可以用 UNIX 域套接字,否則可以采用 TCP/UDP 的模式。兩種模式是不兼容的。特別的,如果是 UNIX 域套接字或者 TCP 模式,需要建立監(jiān)聽套接字,并在事件中心注冊了讀事件,回調函數(shù)是event_handler(),我們會看到所有的連接都會被注冊回調函數(shù)是 event_handler()。

調用event_base_loop()開啟 libevent 的事件循環(huán)。到此,memcached 服務器的工作正式進入了工作。如果遇到致命錯誤或者客戶明令結束 memcached,那么才會進入接下來的清理工作。

UNIX 域套接字和 UDP/TCP 工作模式

在初始化過程中介紹了這兩種模式,memcached 這么做為的是讓其能更加可配置。TCP/UDP 自不用說,UNIX 域套接字有獨特的優(yōu)勢:

在同一臺主機上進行通信時,是不同主機間通信的兩倍
UNIX 域套接口可以在同一臺主機上,不同進程之間傳遞套接字描述符
UNIX 域套接字可以向服務器提供客戶的憑證(用戶id或者用戶組id)
其他關于 UNIX 域套接字優(yōu)缺點的請參看: https://pangea.stanford.edu/computing/UNIX/overview/advantages.php

工作線程管理和線程調配方式

在thread_init(),setup_thread()函數(shù)的實現(xiàn)中,memcached 的意圖是很清楚的。每個線程都有自己獨有的連接隊列,即 CQ,注意這個連接隊列中的對象并不是一個或者多個 memcached 命令,它對應一個客戶! 一旦一個客戶交給了一個線程,它的余生就屬于這個線程了! 線程只要被喚醒就立即進入工作狀態(tài),將自己 CQ 隊列的任務所有完完成。當然,每一個工作線程都有自己的 libevent 事件中心。

很關鍵的線索是thread_init()的實現(xiàn)中,每個工作線程都創(chuàng)建了讀寫管道,所能給我們的提示是: 只要利用 libevent 在工作線程的事件中心注冊讀管道的讀事件,就可以按需喚醒線程,完成工作,很有意思,而setup_thread()的工作正是讀管道的讀事件被注冊到線 程的事件中心,回調函數(shù)是thread_libevent_process().thread_libevent_process()的工作就是從工作線 程自己的 CQ 隊列中取出任務執(zhí)行,而往工作線程工作隊列中添加任務的是dispatch_conn_new(),此函數(shù)一般由主線程調用。下面是主線程和工作線程的工 作流程:

120131223103045

前幾天在微博上,看到 @高端小混混 的微博,轉發(fā)了:

“多任務并行處理的兩種方式,一種是將所有的任務用隊列存儲起來,每個工作者依次去 拿一個來處理,直到做完所有的>任務為止。另一種是將任務平均分給工作者,先做完任務的工作者就去別的工作者那里拿一些任務來做,同樣直到所有任務 做完為止。兩種方式的結果如何?根據自己的場景寫碼驗證。”

memcached 所采用的模式就是這里所說的第二種! memcached 的線程分配模式是:一個主線程和多個工作線程。主線程負責初始化和將接收的請求分派給工作線程,工作線程負責接收客戶的命令請求和回復客戶。

#p#

存儲容器

memcached 是做緩存用的,內部肯定有一個容器?;氐絤ain()中,調用assoc_init()初始化了容器–hashtable,采用頭插法插入新數(shù)據,因為頭 插法是最快的。memcached 只做了一級的索引,即 hash; 接下來的就靠 memcmp() 在鏈表中找數(shù)據所在的位置。memcached 容器管理的接口主要在 item.h .c 中.

220131223103240

 連接管理

每個連接都會建立一個連接結構體與之對應。main()中會調用conn_init()建立連接結構體數(shù)組。連接結構體 struct conn 記錄了連接套接字,讀取的數(shù)據,將要寫入的數(shù)據,libevent event 結構體以及所屬的線程信息。

當有新的連接時,主線程會被喚醒,主線程選定一個工作線程 thread0,在 thread0 的寫管道中寫入數(shù)據,特別的如果是接受新的連接而不是接受新的數(shù)據,寫入管道的數(shù)據是字符 ‘c’。工作線程因管道中有數(shù)據可讀被喚醒,thread_libevent_process()被調用,新連接套接字被注冊了 event_handler()回調函數(shù),這些工作在conn_new()中完成。因此,客戶端有命令請求的時候(譬如發(fā)起 get key 命令),工作線程都會被觸發(fā)調用event_handler()。

當出現(xiàn)致命錯誤或者客戶命令結束服務(quit 命令),關于此連接的結構體內部的數(shù)據會被釋放(譬如曾經讀取的數(shù)據),但結構體本身不釋放,等待下一次使用。如果有需要,連接結構體數(shù)組會指數(shù)自增。

一個請求的工作流程

memcached 服務一個客戶的時候,是怎么一個過程,試著去調試模擬一下。當一個客戶向 memcached 發(fā)起請求時,主線程會被喚醒,接受請求。接下來的工作在連接管理中有說到。

客戶已經與 memcached 服務器建立了連接,客戶在終端(黑框框)敲擊 get key + 回車鍵,一個請求包就發(fā)出去了。從連接管理中已經了解到所有連接套接字都會被注冊回調函數(shù)為event_handler(),因此 event_handler()會被觸發(fā)調用。

  1. void event_handler(const int fd,const short which,void *arg) { 
  2.     conn *c; 
  3.   
  4.     c = (conn *)arg; 
  5.     assert(c != NULL); 
  6.   
  7.     c->whichwhich = which; 
  8.   
  9.     /* sanity */ 
  10.     if (fd != c->sfd) { 
  11.         if (settings.verbose > 0) 
  12.             fprintf(stderr,"Catastrophic: event fd doesn't match conn fd!\n"); 
  13.         conn_close(c); 
  14.         return; 
  15.     } 
  16.   
  17.     drive_machine(c); 
  18.   
  19.     /* wait for next event */ 
  20.     return; 

event_handler()調用了drive_machine().drive_machine()是請求處理的開端,特別的當有新的連接 時,listen socket 也是有請求的,所以建立新的連接也會調用drive_machine(),這在連接管理有提到過。下面是drive_machine()函數(shù)的骨架:

  1. // 請求的開端。當有新的連接的時候 event_handler() 會調用此函數(shù)。 
  2. static void drive_machine(conn *c) { 
  3.     bool stop = false
  4.     int sfd,flags = 1
  5.     socklen_t addrlen; 
  6.     struct sockaddr_storage addr; 
  7.     int nreqs = settings.reqs_per_event; 
  8.     int res; 
  9.     const char *str; 
  10.   
  11.     assert(c != NULL); 
  12.   
  13.     while (!stop) { 
  14.         // while 能保證一個命令被執(zhí)行完成或者異常中斷(譬如 IO 操作次數(shù)超出了一定的限制) 
  15.   
  16.         switch(c->state) { 
  17.         // 正在連接,還沒有 accept 
  18.         case conn_listening: 
  19.   
  20.         // 等待新的命令請求 
  21.         case conn_waiting: 
  22.   
  23.         // 讀取數(shù)據 
  24.         case conn_read: 
  25.   
  26.         // 嘗試解析命令 
  27.         case conn_parse_cmd : 
  28.   
  29.         // 新的命令請求,只是負責轉變 conn 的狀態(tài) 
  30.         case conn_new_cmd: 
  31.   
  32.         // 真正執(zhí)行命令的地方 
  33.         case conn_nread: 
  34.   
  35.         // 讀取所有的數(shù)據,拋棄!!! 一般出錯的情況下會轉換到此狀態(tài) 
  36.         case conn_swallow: 
  37.   
  38.         // 數(shù)據回復 
  39.         case conn_write: 
  40.   
  41.         case conn_mwrite: 
  42.   
  43.         // 連接結束。一般出錯或者客戶顯示結束服務的情況下回轉換到此狀態(tài) 
  44.         case conn_closing: 
  45.         } 
  46.     } 
  47.     return

通過修改連接結構體狀態(tài) struct conn.state 執(zhí)行相應的操作,從而完成一個請求,完成后 stop 會被設置為 true,一個命令只有執(zhí)行結束(無論結果如何)才會跳出這個循環(huán)。我們看到 struct conn 有好多種狀態(tài),一個正常執(zhí)行的命令狀態(tài)的轉換是:

  1. conn_new_cmd->conn_waiting->conn_read->conn_parse_cmd->conn_nread->conn_mwrite->conn_close 

這個過程任何一個環(huán)節(jié)出了問題都會導致狀態(tài)轉變?yōu)?conn_close。帶著剛開始的問題把從客戶連接到一個命令執(zhí)行結束的過程是怎么樣的:

客戶connect()后,memcached 服務器主線程被喚醒,接下來的調用鏈是event_handler()->drive_machine()被調用,此時主線程對應 conn 狀態(tài)為 conn_listining,接受請求

  1. dispatch_conn_new(sfd,conn_new_cmd,EV_READ | EV_PERSIST,DATA_BUFFER_SIZE,tcp_transport); 

dispatch_conn_new()的工作是往工作線程工作隊列中添加任務(前面已經提到過),所以其中一個沉睡的工作線程會被喚醒,thread_libevent_process()會被工作線程調用,注意這些機制都是由 libevent 提供的。

thread_libevent_process()調用conn_new()新建 struct conn 結構體,且狀態(tài)為 conn_new_cmd,其對應的就是剛才accept()的連接套接字.conn_new()最關鍵的任務是將剛才接受的套接字在 libevent 中注冊一個事件,回調函數(shù)是event_handler()。循環(huán)繼續(xù),狀態(tài) conn_new_cmd 下的操作只是只是將 conn 的狀態(tài)轉換為 conn_waiting;

循環(huán)繼續(xù),conn_waiting 狀態(tài)下的操作只是將 conn 狀態(tài)轉換為 conn_read,循環(huán)退出。

此后,如果客戶端不請求服務,那么主線程和工作線程都會沉睡,注意這些機制都是由 libevent 提供的。

客戶敲擊命令「get key」后,工作線程會被喚醒,event_handler()被調用了??? 又被調用了.event_handler()->drive_machine(),此時 conn 的狀態(tài)為 conn_read。conn_read 下的操作就是讀數(shù)據了,如果讀取成功,conn 狀態(tài)被轉換為 conn_parse_cmd。

循環(huán)繼續(xù),conn_parse_cmd 狀態(tài)下的操作就是嘗試解析命令: 可能是較為簡單的命令,就直接回復,狀態(tài)轉換為 conn_close,循環(huán)接下去就結束了; 涉及存取操作的請求會導致 conn_parse_cmd 狀態(tài)轉換為 conn_nread。

循環(huán)繼續(xù),conn_nread 狀態(tài)下的操作是真正執(zhí)行存取命令的地方。里面的操作無非是在內存尋找數(shù)據項,返回數(shù)據。所以接下來的狀態(tài) conn_mwrite,它的操作是為客戶端回復數(shù)據。

狀態(tài)又回到了 conn_new_cmd 迎接新的請求,直到客戶命令結束服務或者發(fā)生致命錯誤。大概就是這么個過程。

#p#

memcached 的分布式

memcached 的服務器沒有向其他 memcached 服務器收發(fā)數(shù)據的功能,意即就算部署多個 memcached 服務器,他們之間也沒有任何的通信。memcached 所謂的分布式部署也是并非平時所說的分布式。所說的「分布式」是通過創(chuàng)建多個 memcached 服務器節(jié)點,在客戶端添加緩存請求分發(fā)器來實現(xiàn)的。memcached 的更多的時候限制是來自網絡 I/O,所以應該盡量減少網絡 I/O。

320131223103255

我在 github 上分享了 memcached 的源碼剖析注釋: 這里

原文鏈接:https://github.com/daoluan/decode-memcached

譯文鏈接:http://blog.jobbole.com/53861/

責任編輯:陳四芳 來源: 伯樂在線
相關推薦

2014-07-03 15:40:09

Apache Spar

2021-11-22 16:12:34

Axios Axios-Retry前端

2021-11-19 07:54:59

Axios網絡源碼

2018-11-16 16:35:19

Java源碼編程語言

2022-10-08 08:01:17

Spring源碼服務

2012-02-14 14:05:59

JavaSpring

2017-04-05 16:40:45

2017-03-16 11:39:33

Openstack源碼姿勢

2018-03-28 16:10:23

閱讀源碼境界

2021-08-02 09:50:47

Vetur源碼SMART

2017-04-13 19:26:21

2014-07-29 09:44:58

jQuery源碼

2021-03-13 14:08:00

Hadoop 源碼HDFS

2021-12-20 07:58:59

GitHub源碼代碼

2018-12-18 13:54:57

MVPGoogleAndroid

2020-12-07 11:29:24

ReactVueVue3

2017-03-27 15:15:43

Hive源碼編譯

2014-12-30 11:04:39

懶人筆記

2021-01-06 05:45:58

Dubbo源碼高并發(fā)

2021-03-13 11:23:51

源碼邏輯框架
點贊
收藏

51CTO技術棧公眾號

亚洲一区二区三区观看| 鲁丝一区二区三区免费| 性色av无码久久一区二区三区| 欧洲美女精品免费观看视频| 亚洲已满18点击进入久久| 国产一区二区三区高清| 国产乡下妇女三片| 国产精品分类| 色yeye香蕉凹凸一区二区av| 欧美丰满熟妇bbb久久久| 亚洲女同av| 亚洲黄一区二区三区| 久久久综合亚洲91久久98| 91麻豆国产视频| 国产精品久久久久久模特 | 人体精品一二三区| 影音先锋男人资源在线观看| 成人三级毛片| 7777精品伊人久久久大香线蕉最新版| 色欲色香天天天综合网www| 97视频在线观看网站| 99国产精品久| 不卡日韩av| 91久久精品无码一区二区| 久久久久国产精品一区三寸| 久久久久久久久久久久av| 国产精品久久久视频| 人妖一区二区三区| 欧美一区二区三区人| 国产区二区三区| a一区二区三区| 天天色图综合网| 亚洲精品国产suv一区88| 在线视频二区| 国产日韩欧美电影| 欧美日韩日本网| 青春有你2免费观看完整版在线播放高清| 国产精品亚洲成人| 91免费高清视频| 91影院在线播放| 青青草精品视频| 国产精品极品在线| 中文字幕在线天堂| 久久性色av| 日韩美女在线看| 国产一级一级国产| 免费视频久久| 欧美最猛性xxxxx(亚洲精品)| 四虎永久在线精品| 在线观看日韩av电影| 国内精品久久久久久中文字幕| 欧美日韩精品亚洲精品| 亚洲第一偷拍| 欧美国产日韩视频| 久久97人妻无码一区二区三区| 欧美国产激情| 欧美黄色三级网站| 日韩三级小视频| 国产欧美一级| 日韩av日韩在线观看| 69亚洲精品久久久蜜桃小说| 日韩精彩视频在线观看| 国产精品v片在线观看不卡| 伦av综合一区| 美腿丝袜在线亚洲一区| 92福利视频午夜1000合集在线观看 | 中国老熟女重囗味hdxx| 一区二区三区免费在线看| 欧美精品一区二区三区在线| 亚洲黄色免费在线观看| 亚洲免费专区| 日韩在线欧美在线| 国产女片a归国片aa| 最新亚洲激情| 国产精品久久久| 国产精品系列视频| 成人视屏免费看| 欧美精品一区二区三区在线看午夜 | 国产91绿帽单男绿奴| www.欧美日韩| 视频一区二区精品| 成人短视频在线| 欧美日韩国产黄| 亚洲少妇第一页| 麻豆精品一区| 亚洲精品视频免费在线观看| 亚欧精品视频一区二区三区| 好看不卡的中文字幕| 日本久久久久久久久| 91在线精品入口| 成人亚洲一区二区一| 日韩一区二区三区资源| 久久免费电影| 色诱视频网站一区| 亚洲精品一二三四| 欧美美女在线| 久久久久久久成人| 一区二区视频网| 97超碰欧美中文字幕| 樱花www成人免费视频| a毛片不卡免费看片| 精品视频资源站| 欧美一区二区三区成人精品| 91精品国产乱码久久久久久久| 2018日韩中文字幕| 国产精品久久久久久免费免熟 | 日本视频中文字幕一区二区三区| 亚洲一区二区日本| melody高清在线观看| 亚洲动漫第一页| 91pony九色| 欧美人与拘性视交免费看| 九九视频直播综合网| 一级久久久久久| 成人黄色在线网站| 久久免费视频2| 草莓视频成人appios| 亚洲精品动漫久久久久| 欧美日韩在线观看免费| 日本不卡一区二区| 蜜桃av色综合| 国产ktv在线视频| 亚洲麻豆精品| 成人福利在线看| 国产高清精品软男同| 亚洲午夜天堂| 亚洲国产一区二区三区四区| 成人观看免费视频| 精品在线你懂的| 日韩影片在线播放| 97久久香蕉国产线看观看| 亚洲精品www久久久| 久久久久久久久久99| 国产真实乱对白精彩久久| 亚洲精品在线视频观看| 成人做爰视频www| 亚洲人成绝费网站色www| 69视频免费在线观看| 不卡一卡二卡三乱码免费网站| 特级西西人体www高清大胆| 日韩午夜电影免费看| 中文字幕欧美日韩va免费视频| 亚洲欧美另类在线视频| 99久久久免费精品国产一区二区| 久无码久无码av无码| 粉嫩的18在线观看极品精品| 欧美华人在线视频| 你懂的网站在线| 午夜精品久久一牛影视| 亚洲美女在线播放| 日韩视频一区| 鲁丝一区二区三区免费| 在线观看精品| 中国人与牲禽动交精品| 中日韩在线观看视频| 中文字幕第一区二区| 亚洲第一天堂久久| 午夜日韩av| 国内不卡一区二区三区| 在线人成日本视频| 国产亚洲欧洲高清一区| 亚洲视频久久久| 亚洲人成影院在线观看| 亚洲欧美激情一区二区三区| 亚洲美女黄网| 日本成人三级| www欧美在线观看| 欧美激情第6页| 香蕉av在线播放| 欧美在线短视频| 麻豆明星ai换脸视频| 成人性视频网站| 情侣黄网站免费看| 99久久视频| 国产精品免费在线播放| 成人免费看视频网站| 色天天综合狠狠色| 亚洲第一第二区| 欧美视频在线免费看| 久久午夜精品视频| 成人午夜在线播放| 一级黄色香蕉视频| 在线成人直播| 免费精品视频一区二区三区| 日日夜夜综合| 91av视频在线观看| 欧美性天天影视| 亚洲国产高潮在线观看| 波多野结衣视频免费观看| 亚洲精品综合在线| xxx在线播放| 国产精品白丝av| 国产自偷自偷免费一区 | 中文日韩在线观看| www国产一区| 在线免费精品视频| 久久精品国产亚洲av麻豆色欲| 久久精品国产亚洲5555| 国产日韩一级二级三级| 日韩黄色片视频| 一区二区三区毛片免费| 欧洲久久久久久| 视频一区在线| 国产噜噜噜噜久久久久久久久| av伦理在线| 欧美成年人在线观看| 久蕉依人在线视频| 亚洲精品一区二区三区福利| 国产又粗又大又爽| 一本大道久久a久久精二百| 少妇影院在线观看| 日本一区二区三区免费乱视频| 国产女人18毛片水真多18| 精品在线播放免费| 午夜精品久久久内射近拍高清| 欧美fxxxxxx另类| 亚洲国产一区二区三区在线| 色愁久久久久久| 动漫一区二区在线| 在线不卡一区| 国产精品久久9| 黑人精品一区| 69影院欧美专区视频| 中文字幕资源网在线观看| 夜夜嗨av色综合久久久综合网| 手机在线观看毛片| 日韩欧美国产综合一区 | 成人午夜视频在线观看| 911福利视频| 久久精品99国产精品日本| 国产麻花豆剧传媒精品mv在线| 99精品视频网| 欧美日韩精品在线一区二区| 欧美成人首页| av中文字幕av| 中文字幕av亚洲精品一部二部| 亚洲精品一区二区三区樱花| 国产精品嫩模av在线| 久久涩涩网站| 五月国产精品| 欧美一级爽aaaaa大片| 免费久久久久久久久| 欧美日韩精品免费看| 偷拍一区二区| 欧美激情国产日韩| 久久综合影院| 夜夜精品视频一区二区| 国产裸体舞一区二区三区| 亚洲欧美卡通另类91av| 免费无码不卡视频在线观看| 99成人在线| 亚洲自偷自拍熟女另类| 国产毛片一区| 国产精品无码专区av在线播放| 羞羞答答国产精品www一本| 熟女性饥渴一区二区三区| 久久精品系列| 韩国中文字幕av| 久久99久久久欧美国产| 天堂av8在线| 国产盗摄视频一区二区三区| 久久久久久久久久影视| 91丨porny丨国产入口| 一区二区伦理片| 国产精品久久久久三级| 成人一级黄色大片| 亚洲激情在线激情| 国偷自拍第113页| 在线看国产一区二区| 97精品人妻一区二区三区| 日韩三级视频在线看| 手机看片1024日韩| 亚洲一二在线观看| 黄在线免费看| 欧美极品少妇xxxxⅹ喷水| 日本午夜大片a在线观看| 日韩av成人在线观看| 黑人一区二区三区| 99三级在线| 综合干狼人综合首页| 一区二区精品国产| 黑人一区二区| 久草综合在线观看| 国产一区91精品张津瑜| 久久久久成人精品无码中文字幕| 久久九九久久九九| 顶臀精品视频www| 激情懂色av一区av二区av| 波多野结衣电车痴汉| 日韩视频中午一区| 久久电影视频| 久久久久久12| 青青草国产一区二区三区| 国产欧美一区二区视频| 久久在线免费| aa在线免费观看| 国产综合色产在线精品| 国产美女喷水视频| 一区二区三区在线观看动漫| 波多野结衣家庭主妇| 精品国产乱码久久久久久牛牛| 黄色av网站在线免费观看| 欧美国产日韩在线| 青草综合视频| 日产精品久久久一区二区| 黄页网站一区| 亚洲va在线va天堂va偷拍| 91在线观看污| 久久中文字幕在线观看| 欧美四级电影在线观看| 婷婷开心激情网| 欧美成年人网站| 欧美日韩在线精品一区二区三区激情综合| 欧美性猛片aaaaaaa做受| 情侣黄网站免费看| 国产成人自拍高清视频在线免费播放| 男女做爰猛烈刺激| 亚洲线精品一区二区三区八戒| 一女二男一黄一片| 亚洲欧美一区二区三区四区 | 亚洲色图清纯唯美| 欧美一区二区三区不卡视频| 精品福利一区二区三区| 黄网站视频在线观看| 国产精品久久二区| 欧美猛男男男激情videos| 丰满少妇久久久| 成人免费福利片| 麻豆亚洲av成人无码久久精品| 欧美色精品天天在线观看视频| 蜜桃视频在线观看视频| 91国产精品视频在线| 国产精品香蕉| 女人色极品影院| 国产乱理伦片在线观看夜一区| 国产黄a三级三级| 欧美在线不卡视频| 国产黄在线观看| 国产成人亚洲综合91| 免费成人av| 亚洲成色www.777999| 91热门视频在线观看| 欧美另类一区二区| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 免费看男男www网站入口在线 | 日韩电影中文字幕在线观看| 久久久123| 国产区一区二区| 国产精品一区亚洲| aaaaa级少妇高潮大片免费看| 欧美午夜精品久久久久久久| 色天堂在线视频| 日本午夜在线亚洲.国产| 丝袜连裤袜欧美激情日韩| 乱妇乱女熟妇熟女网站| 91蜜桃网址入口| 国产污视频网站| 日韩在线观看网站| 国产一区二区三区亚洲综合| 成人午夜视频免费观看| 波多野结衣一区二区三区 | 日韩一区二区三区在线视频| www免费在线观看| 不卡的av一区| 免费日韩av片| 99热这里只有精品4| 日韩午夜在线影院| 超碰在线cao| 欧美一区二区三区在线免费观看| 日韩中文字幕亚洲一区二区va在线 | 亚洲日本三级| 午夜剧场高清版免费观看| 亚洲免费大片在线观看| 日本久久一级片| 国产成人啪精品视频免费网| 久久人人99| 美女网站视频在线观看| 色国产精品一区在线观看| 色综合久久影院| 国产精品二区三区| 日韩制服丝袜av| 国产日韩欧美在线观看视频| 日韩精品久久久久久久玫瑰园| 成人久久网站| 91成人综合网| 日本一区二区免费在线 | 成人在线一区二区三区| 五月天婷婷导航| 美女av一区二区| 亚洲人挤奶视频| 亚洲三级在线视频| 欧美性xxxx极品hd满灌| 好吊日视频在线观看| 久久久久久久久久久久久久久久av | 天天射,天天干| 成人免费黄色网| 久久高清国产| 国产一区二区三区在线视频观看| 亚洲欧美一区二区精品久久久| 欧美久久亚洲|