青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

XGuru's Blog

技術,是一種態度。關注:高性能后端技術/服務器架構/C++/C/LAMP

   :: 首頁 :: 聯系 :: 聚合  :: 管理
  20 Posts :: 0 Stories :: 93 Comments :: 0 Trackbacks

公告





twitter / xoXGuru

feedsky
抓虾
google reader
鲜果
QQ邮箱
九点

常用鏈接

留言簿(12)

搜索

  •  

最新評論

閱讀排行榜

#

 

2.1 event_base核心事件基類數據結構



 


      可以看出event_base是整個libevent的核心部分,它由三種結構構成:一個時間堆 (對應EVLIST_TIMEOUT),一個已注冊隊列(對應EVLIST_INSERTE),一個活躍事件隊列(對應EVLIST_ACTIVE)。

      時間堆采用的是min-Heap最小二叉堆,已注冊隊列和活躍事件隊列采用的都是雙向鏈表。

      已注冊隊列對應事件基中的eventqueue,活躍事件隊列對應的是事件基中的activequeues[ev->ev_pri]結構體數組。其中的ev_pri代表的是事件的優先級,數值越小代表越高的優先級別。

      可以通過調用event_priority_set()函數對其優先級進行設置,默認插入中等優先級(nactivequeues/2 ,即活躍隊列總數除以2)。


 

2.2 超時隊列(min-Heap最小二叉堆)

      在這里處理超時機制中使用了一個經典的數據結構min-Heap,源碼位于Min_heap.h

libevent從1.4版本之后就開始采用min-Heap來代替RB-Tree。

min-Heap(最小二叉堆)遵循的原則:

1.它是一種完全二叉樹

2.它最小的元素在頂端每個元素都比它的父節點大(或相等)。

插入元素時間復雜度為O(log n),找出最小值的復雜度僅為O(1)。

libevent實現的min-Heap變量名有點猥瑣。

1typedef struct min_heap
2{
3    struct event** p;
4    unsigned n, a;
5}
 min_heap_t;
6

 

 

p可以理解成存儲事件指針的數組,n表示的是容量,a表示的是當前數。

堆的操作函數里一般e代表事件,s代表被操縱的min-Heap。

這個min-heap作者應該是OOP陣營的,其中出現有對應構造函數的min_heap_ctor(),和對應析構函數min_heap_dtor()。


 

2.3事件隊列(雙向鏈表)

libevent中的活躍事件隊列和已注冊隊列采用的數據結構都是用宏來實現的,原在freeBSD的<sys/queue.h>中已有定義,為了對Linux跨平臺支持考慮,libevent將部分代碼集中到event_internal.h里。


1#define TAILQ_ENTRY(type)                        \
2struct {                                         \
3    struct type *tqe_next;    /* 下一個元素 */         \
4    struct type **tqe_prev;    /*上一個元素的地址*/      \
5}

6

 

libevent用到的宏操作

宏名稱

操作

TAILQ_INIT

初始化隊列

TAILQ_FOREACH

對隊列進行遍歷操作

TAILQ_INSERT_BEFORE

在指定元素之前插入元素

TAILQ_INSERT_TAIL

在隊列尾部插入元素

TAILQ_EMPTY

檢查隊列是否為空

TAILQ_REMOVE

從隊列中移除元素

posted @ 2010-06-24 00:23 XGuru 閱讀(2006) | 評論 (1)編輯 收藏

Libevent簡介

The libevent API provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached. Furthermore, libevent also support callbacks due to signals or regular timeouts. 

 

Libevent的API提供了這樣的一套機制:
當指定文件描述符中一個特定的事件發生,或者超時時間到達后執行指定的回調函數。
此外,libevent回調功能也支持由信號或者常規的超時觸發。
注意其許可協議為BSD-style的協議,可以在商業級產品中采用而不必開源。

 

1.編譯安裝


 

ubuntu下可以使用apt的方法直接安裝:

 

 ~$  sudo apt-get install libevent

或者使用

~$  wget http://monkey.org/~provos/libevent-1.4.13-stable.tar.gz
~$  tar –xzvf  libevent-1.4.13-stable.tar.gz
~$  cd libevent-1.4.13-stable
~$  ./configure
~$  make
~$  sudo make install

2.庫的使用
 

可以從這幾個簡單的例子中了解到libevent的基本使用方法。編譯時需加上 "-levent"參數。

 

2.1.I/O事件(對應EV_READ、EV_WRITE)

下面提供了一個有所省略簡單使用libevent返回系統時間的服務端程序片段。

 1void get_time(int fd,short event,struct event *arg)  /*獲取系統時間并將其往回write*/
 2{
 3……
 4    localtime_r(&now,&t);
 5    asctime_r(&t,buf);
 6    write( fd,buf,strlen(buf) );
 7……
 8}

 9void con_accept(int fd,short event,void *arg) /*提供給事件的回調函數,接收一個連接*/
10{
11    struct sockaddr_in s_in;
12    socklen_t len = sizeof(s_in);
13    int ns = accept(fd,(struct sockaddr *&s_in,&len);
14    struct event *ev = malloc(sizeof(struct event));
15    event_set(ev,ns,EV_WRITE,(void *)get_time,ev);
16    event_add(ev,NULL);
17}

18                
19int main()
20{
21    int sockfd = socket(PF_INET,SOCK_STREAM,0);
22    struct sockaddr_in s_in;
23……
24    bind(sockfd,(struct sockaddr*&s_in,sizeof(s_in));
25    listen(sockfd,5);
26    event_init(); //libevent初始化
27
28    struct event ev;
29    event_set(&ev,sockfd,EV_READ|EV_PERSIST,con_accept,&ev);
30//設置事件屬性為可讀、持續,回調函數為con_accept()
31    event_add(&ev,NULL);//添加事件,未設置超時時間
32    event_dispatch();//進入libevent主循環
33    return 0;
34}

35

2.2. 信號處理事件(對應EV_SIGNAL)

 1 static void signal_cb(int fd, short eventvoid *arg)
 2{
 3    struct event *signal = arg;
 4    printf("%s: got signal %d\n", __func__, EVENT_SIGNAL(signal));
 5    if (called >= 2)
 6        event_del(signal); //如果調用了兩次以上,就刪除這個信號
 7    called++;
 8}

 9
10int main (int argc, char **argv)
11{
12    struct event signal_int;
13    event_init();//libevent初始化
14    event_set(&signal_int, SIGINT, EV_SIGNAL|EV_PERSIST, signal_cb, &signal_int); 
15//設置事件屬性為信號觸發、持續,回調函數為con_accept()
16    event_add(&signal_int, NULL); //添加事件
17    event_dispatch();//進入libevent主循環
18    return 0;
19}

20

2.3.常規超時處理(對應EV_TIMEOUT)
 1static void timeout_cb(int fd, short eventvoid *arg)
 2{
 3    struct timeval tv;
 4    struct event *timeout = arg;
 5    int newtime = time(NULL);
 6    printf("%s: called at %d: %d\n", __func__, newtime,
 7        newtime - lasttime);
 8    lasttime = newtime;
 9    evutil_timerclear(&tv);
10    tv.tv_sec = 2;
11    event_add(timeout, &tv);
12}

13
14int main (int argc, char **argv)
15{
16    struct event timeout;
17    struct timeval tv;
18    event_init();//libevent初始化
19    evtimer_set(&timeout, timeout_cb, &timeout);
20//實際上該函數對應的是event_set(timeout, -1, 0, timeout_cb,&timeout)
21evutil_timerclear(&tv); //如果有時間清理函數則直接對應timerclear(),如果沒有則將tv_sec和tv_usec設置為0
22
23    tv.tv_sec = 2;
24    event_add(&timeout, &tv);
25    lasttime = time(NULL);
26    event_dispatch();
27    return 0;
28}

29

posted @ 2010-06-24 00:13 XGuru 閱讀(6088) | 評論 (0)編輯 收藏

     摘要: 很多程序員討厭去閱讀代碼,來接受它吧。就像人人都喜歡寫代碼一樣--寫代碼很有樂趣。但閱讀代碼卻是一種困難的工作。它不僅僅繁重,而且很無聊,讓我們面對這個事實,任何不是自己寫的代碼都是差勁的(嘿嘿,雖然我們沒有這樣說過,但是其實我們都是這樣想的)。甚至當你寫完代碼后的僅僅幾個小時之后,你的那些代碼就開始變得越來越爛了,時間一長,你就會把它當作看起來的那種差勁作品。為何我喜愛讀他人的代碼?閱讀代碼又有什么技巧和方法呢?而且你還需要去尋找代碼閱讀機會--而不是逃避它們  閱讀全文
posted @ 2010-06-04 15:55 XGuru 閱讀(6541) | 評論 (10)編輯 收藏

     摘要: 我讀了大量關于如何招募 卓越 開發者 的文章,但是如果你只對招聘蹩腳程序員感興趣,那又該怎么辦呢?也許你不愿意用錢去利滾利,或者你只覺得把工作完成就謝天謝地了。不管什么原因,這個蹩腳程序員系列文章就是玩這個把戲的。歡迎來到第一部分:如何招聘蹩腳程序員  閱讀全文
posted @ 2010-04-26 15:43 XGuru 閱讀(2643) | 評論 (0)編輯 收藏

     摘要: 數學對于一個開發者而言是否重要呢?一位不愿透露姓名的讀者寫道:“目前,大多數的編程工作的性質就是這樣,你并不真正需要的數學技能,甚至能做得更好,畢竟線性代數對建立數據庫驅動的網站是沒有任何幫助的。然而, Skorkin爭辯說,如果你想在軟件開發領域做真正令人興奮的工作,數學技能是必要的,而且它將會變得越來越重要!  閱讀全文
posted @ 2010-04-02 00:18 XGuru 閱讀(5030) | 評論 (6)編輯 收藏

這是一個非常有趣的,從計算機科學、軟件工程、程序設計、經驗、學識各方面評估程序員能力的參照表。

如果你想看看自己的水平處在哪個層級(僅供參考),就快來看看吧~

漢化版地址在這里。


錯誤在所難免,如果發現,請您拍磚!
*原作者 :Sijin Joseph
*英文原文請看 這里。
*感謝 bearice 提供修改意見和空間。
posted @ 2010-03-12 21:33 XGuru 閱讀(4102) | 評論 (1)編輯 收藏

Memcached是一個自由、源碼開放、高性能、分布式內存對象緩存系統,目的在于通過減輕數據庫負載來使動態Web應用程序提速。

俗話說好記性不如爛筆頭。
這個文檔是我用來記錄閱讀Memcached源碼過程中的一些經驗,以及分析memcached的一些內部工作機制。
希望也能給大家帶來方便。

PDF目錄

1. 背景 .................................................................................................................................. 3
2. memcached的安裝 ........................................................................................................... 4
3. memcached的配置 ........................................................................................................... 5
4. memcached的使用 ........................................................................................................... 6
4.1. 存儲命令 ............................................................................................................ 7
4.2. 讀取命令 ............................................................................................................ 8
4.3. 刪除命令 ............................................................................................................ 8
4.4. 高級命令 ............................................................................................................ 9
4.5. 其他命令 .......................................................................................................... 10
5. Memcached內部工作機制 ............................................................................................. 11
5.1. Memcached基本的數據結構 .......................................................................... 11
5.2. 基本設計概念和處理流程 .............................................................................. 12
5.3. 內部Hash機制 ................................................................................................ 15
5.3.1. Hash函數及沖突解決 ............................................................................. 15
5.3.2. HashTable主要函數 ................................................................................ 15
5.4. slab內存處理機制 ........................................................................................... 17
5.4.1. slab主要函數 ........................................................................................... 17
5.4.2. slab機制中所采用的LRU算法 ............................................................. 19
5.5. 控制item各種函數 ......................................................................................... 20
5.6. 守護進程機制 .................................................................................................. 22
5.7. Socket處理機制 .............................................................................................. 23
5.7.1. Unix域協議 .............................................................................................. 23
5.7.2. TCP/UDP協議 ......................................................................................... 24
5.8. 多線程處理機制 .............................................................................................. 25
5.9. 事件處理機制 .................................................................................................. 25
6. 未完善之處 ..................................................................................................................... 27
7. 參考文獻 ......................................................................................................................... 28

本人水平有限,歡迎大家拍磚!
下載PDF

參考文獻

[1].Masahiro Nagano[JP] & charlee().memcached全面剖析.2008-7-2

[2].W.Richard Stevens & 楊繼張().UNIX 網絡編程(第三版).2004

[3]. W.Richard Stevens.UNIX環境高級編程(第二版).2005

[4]. dsallings.Memcached FAQ.2009-9

[5]. bachmozart .Memcached源碼分析(線程模型).

[6]. 愛寫字開發博客.Linux下啟用Wordpressmemcached支持.


posted @ 2010-01-23 00:39 XGuru 閱讀(7332) | 評論 (10)編輯 收藏

     摘要: by Xguru  又說階乘,這是老生常談了吧。想都不用想,一個遞歸輕松搞定! int factorial(int n){    if( n == 1)        return 1; &n...  閱讀全文
posted @ 2009-12-30 19:02 XGuru 閱讀(1936) | 評論 (4)編輯 收藏

 

大家對數組的使用再熟悉不過了吧?
來看下這個程序,挺簡單的。

1#include<iostream>
2int main()
3{
4    int a[] = {1,2,3,4,5};
5    for(int i = 0 ; i < 5; i++)
6        std::cout << i[a] << " ";
7    return 0;
8}


現在請仔細看第6行。
發現了什么?
試下編譯一下看能不能通過?


把這個程序更加簡化

1int a[5= {1,2,3,4,5};
2int b = 1[a];

 
再來看下產生的匯編代碼
4:       int a[5] = {1,2,3,4,5};
00401568   mov         dword ptr [ebp-14h],1
0040156F   mov         dword ptr [ebp-10h],2
00401576   mov         dword ptr [ebp-0Ch],3
0040157D   mov         dword ptr [ebp-8],4
00401584   mov         dword ptr [ebp-4],5
5:        int b = 1[a];
0040158B   mov         eax,dword ptr [ebp-10h]
0040158E   mov         dword ptr [ebp-18h],eax

你沒有看錯,此刻這個數組春哥附體,a[1]的指向地址和1[a]是一樣的,都是[ebp-10h]。

Why?

我們回憶一下數組和指針的關系,如何用指針來表示數組?
*a  就是 數組 a中下標為0的值的引用,即a[0],
那么*(a+i) 呢?
表示的就應該是數組 a中下標為i的值的引用了,即a[i],
那么這種現象也不足為怪了:
因為 *(a+i)  == *(i+a)
所以 a[i] == i[a]

是不是感到 啊哈!靈機一動(aha! Insight)了呢?

擴展資料:《C陷阱與缺陷》p33~p38




posted @ 2009-12-24 00:55 XGuru 閱讀(2170) | 評論 (14)編輯 收藏

      深入學習了STL的內部構造以及一些C++深層次的機制與技巧以后,突然浮現出每個Programmer都要面對的問題。

      Why Programming in C++?

      比起質樸純凈的C,靈活龐大的JAVAC#,我為什么要選擇C++?

       在各大技術BBS和牛人的BLOG里逛,大家都在為自己喜歡的語言爭論,C#/JAVA的程序員說,不要重復造車輪,擁有良好的語言平臺,有豐富全面的庫比較全,可以將注意力轉向更為重要的架構方面,軟件工程方面。又何必在語言的表層基礎苦上苦癡迷?C++標準中連最基本的GUI庫和網絡庫都沒有。包括 C++創始人BJ本人也想將C++發展成為一個平臺(palform)。

       C++STL庫固然不錯,但是一個新手用STL時,一個小錯誤編譯就跳出上K的錯誤信息(就算有STLFilt,確實也以難安裝),最新的C++0x中 能改善這一問題的萬眾矚目的Concept已被取消,C++又該何去何從?C的程序員(包括Linus大叔)說,C++簡直就是邪惡的語言,效率底下,語言繁雜,違反KISS原則,更無法在底層如操作系統中勝任。大家說的好像都有道理,難道C++就是這樣一門高不成,低不就的語言么?

       我也用過C語言和C#語言,而且還在大學里也拿過關于這兩種語言競賽一些小小的獎,最起碼能說對這兩種語言還有粗略的了解。

       但是我最喜歡、花的時間最多的還是C++。C++是我學的第一門語言,一路學來吃了不少苦,C++作為語言國度的一個聯邦[EFC++Item1],靈活,彈性大讓我著迷,它像一個精通太極的大師,容納百川,但卻深藏若拙。它有精妙的技法如SFINAEtag distributing (技法的復雜性這也是它被指責的重要原因)。

       它有沉著老練的STL庫,其中有各種數據結構和常用算法的靈活精巧的實現和高度可擴充性,有銳意進取的boost庫,loki庫,有超重量級的網絡通信開發框架ACE,還有效率較高的Blitz++科學庫等。

       C#中的各種“高階”功能C++都能實現(沒有“基本”兩字,您和我說不可能?那就去看看C#的托管機制是用什么語言寫的吧),雖然您將花費更多的時間學習與調試,但是我覺得中途的樂趣只有您自己做過才能深有體會。

       它和C語言工作效率不分伯仲,(您說C++效率低下?請問您深入用過C++么?您看過SGI實做中內存分配的實現么?)C++也可以毫不費力的使用現有的 C代碼(所謂C-Sytle),C++STL中泛型的sort完勝C中的qsort這也是C++程序員津津樂道的話題。

       但哪種語言不是經過無數大牛們大師們千錘百煉的產物?爭論哪種語言的好壞只是顯出您的自卑心理。當你去說一門語言好與不好的時候,你有想過,你有真正的深入的學過它么?你真正的了解這門語言的特性么?

       請記住這句話:好手藝人從不會責怪他的工具。語言沒有好壞之分,只有在特定環境下,具備各自的優勢。

       對于初學者而言,學通一門語言是他叩開計算機底層原理世界的大門的鑰匙。語言的好壞不重要,關鍵是看你自身從學習這門語言中得到了什么。

       若是單單執著于語法細節,把把你的思想全部拘束在孔乙已爭論茴香豆的“茴”的幾種寫法上(像貴國的等級考試這類的考察語言偏僻細節上),你將會得不償失。

       在學習的提高階段,可以通過大體學習其他的語言,來發散自己的思維;甚至還可以幫助你更好的理解你所目前熱愛的語言。

       還有一些人執著爭論哪門語言更有“錢途”的時候,我建議您嘞,改行吧。 (您說我裝清高,什么程序員也要吃飯,現實也很殘酷之類的。我只能說,連吃飯都成問題的,您也不適合在這個層面上討論語言的好壞,您還是繼續學吧)。

  by XGuru 09年12月

posted @ 2009-12-20 23:10 XGuru 閱讀(2060) | 評論 (11)編輯 收藏

僅列出標題
共2頁: 1 2 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美黄色一区二区| 欧美 日韩 国产 一区| 亚洲国产女人aaa毛片在线| 欧美日韩综合精品| 久久久久久久久伊人| 一区二区三区在线高清| 一区二区不卡在线视频 午夜欧美不卡在 | 韩日精品中文字幕| 欧美日本在线播放| 久久综合给合久久狠狠色| 亚洲欧美视频在线观看| 99re66热这里只有精品3直播| 免费在线视频一区| 久久精品在线观看| 午夜国产不卡在线观看视频| 一本色道**综合亚洲精品蜜桃冫| 在线免费观看日本欧美| 国产有码一区二区| 国产一区二区久久精品| 国产精品国产三级国产普通话99 | 午夜欧美精品| 欧美日韩精品免费观看视一区二区| 狠狠色丁香婷婷综合| 久久久久久穴| 欧美一区精品| 蜜臀av一级做a爰片久久| 老司机精品视频网站| 国产一区二区三区精品久久久| 亚洲中字在线| 久久av一区二区三区漫画| 国产精品自在欧美一区| 午夜精品影院在线观看| 欧美一站二站| 黑人巨大精品欧美一区二区小视频 | 亚洲人成77777在线观看网| 亚洲国产天堂久久综合| 欧美18av| 亚洲日本成人女熟在线观看| 一区二区三区 在线观看视| 欧美日本国产| 亚洲午夜国产一区99re久久| 欧美夜福利tv在线| 国精产品99永久一区一区| 久久九九久久九九| 亚洲电影专区| 亚洲一区二区三区激情| 国产伦精品一区二区三区视频黑人| 亚洲在线视频一区| 久久人体大胆视频| 亚洲精品女人| 国产精品成人av性教育| 欧美亚洲一区二区在线观看| 欧美v日韩v国产v| 99v久久综合狠狠综合久久| 国产精品久久久久9999吃药| 欧美一区二区三区精品电影| 欧美一二区视频| 亚洲人成网站999久久久综合| 黄色欧美成人| 国内揄拍国内精品少妇国语| 国产精品久久久久毛片软件| 欧美日韩在线免费观看| 欧美乱妇高清无乱码| 欧美高清免费| 欧美国产日韩a欧美在线观看| 毛片基地黄久久久久久天堂| 久久久久久夜精品精品免费| 久久国产黑丝| 久久成人一区| 久久精品中文| 久久免费视频网| 久久只精品国产| 麻豆免费精品视频| 欧美~级网站不卡| 欧美99在线视频观看| 国产精品99久久久久久宅男| 亚洲欧美日韩一区二区| 亚洲精品久久视频| 韩国三级电影一区二区| 欧美色欧美亚洲高清在线视频| 久久久www成人免费毛片麻豆| 夜夜爽av福利精品导航| 欧美freesex8一10精品| 欧美伊人久久久久久久久影院| 亚洲国语精品自产拍在线观看| 国产欧美亚洲视频| 欧美少妇一区| 欧美日韩黄色大片| 欧美 日韩 国产 一区| 欧美综合二区| 亚洲伊人一本大道中文字幕| 最新日韩在线视频| 免费一级欧美片在线观看| 久久9热精品视频| 亚洲欧美日本在线| 亚洲一级免费视频| 99精品免费网| 亚洲精品网站在线播放gif| 国模套图日韩精品一区二区| 国产九九精品视频| 欧美亚洲成人网| 欧美三日本三级少妇三2023| 欧美高清视频www夜色资源网| 久久永久免费| 免费亚洲电影在线| 米奇777在线欧美播放| 久久午夜激情| 免费久久99精品国产| 久热精品在线| 欧美顶级少妇做爰| 欧美另类女人| 国产精品jizz在线观看美国 | 欧美日本高清| 欧美日本三区| 国产精品久久久久影院色老大 | 久久色在线播放| 欧美日韩在线一区二区三区| 韩日午夜在线资源一区二区| av成人天堂| 美女精品视频一区| 一区二区三区精品在线| 麻豆av一区二区三区| 国产精品女人毛片| 日韩特黄影片| 久久夜色精品国产欧美乱极品| 日韩亚洲欧美一区| 久久久水蜜桃av免费网站| 欧美午夜剧场| 亚洲人屁股眼子交8| 久久久精品一区| 亚洲一区二区三区高清不卡| 欧美高清视频一区| 在线观看成人av| 久久国产视频网站| 久久精品视频免费| 欧美一级视频精品观看| 免费成人黄色| 欧美色另类天堂2015| 国产一区二区电影在线观看| 亚洲欧洲另类| 欧美亚洲色图校园春色| 欧美福利视频一区| 日韩亚洲欧美成人| 久久精品视频网| 欧美日韩国产综合视频在线| 国产欧美日韩在线播放| 亚洲激情图片小说视频| 中国av一区| 久久久最新网址| 99re6热只有精品免费观看| 亚洲欧美色婷婷| 欧美激情一区二区三区| 国产欧美精品一区二区三区介绍 | 久久久精品午夜少妇| 亚洲激情在线观看| 欧美一区二区三区视频在线 | 亚洲国产清纯| 亚洲欧美制服另类日韩| 欧美国产一区二区在线观看| 夜夜嗨av一区二区三区中文字幕| 久久精品在线免费观看| 欧美偷拍另类| 亚洲人精品午夜在线观看| 久久www免费人成看片高清| 亚洲国产mv| 久久精视频免费在线久久完整在线看| 欧美日韩美女一区二区| 亚洲高清不卡av| 欧美有码在线视频| 一区二区欧美精品| 羞羞答答国产精品www一本| 国语自产精品视频在线看一大j8 | 性做久久久久久久久| 久久精品成人一区二区三区蜜臀 | 免费视频最近日韩| 亚洲国产精品成人综合| 亚洲国产成人91精品| 欧美激情一区二区三区成人| 日韩视频专区| 99精品欧美一区| 国产精品私拍pans大尺度在线| 久久国产乱子精品免费女| 久久精品国产2020观看福利| 在线欧美一区| 亚洲精品国产精品久久清纯直播| 欧美日韩一区精品| 欧美在线中文字幕| 久久久久久久尹人综合网亚洲 | 一本色道久久88综合亚洲精品ⅰ | 欧美在线一级va免费观看| 亚洲人体影院| 欧美aa在线视频| 亚洲激情视频在线播放| 蜜桃av一区二区三区| 久久久久久久久久久久久女国产乱 | 久久婷婷蜜乳一本欲蜜臀| 国产一区二区在线观看免费播放| 香蕉国产精品偷在线观看不卡| 亚洲制服av| 国产欧美日韩另类一区 |