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

XGuru's Blog

技術(shù),是一種態(tài)度。關(guān)注:高性能后端技術(shù)/服務(wù)器架構(gòu)/C++/C/LAMP

   :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  20 Posts :: 0 Stories :: 93 Comments :: 0 Trackbacks

公告





twitter / xoXGuru

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

常用鏈接

留言簿(12)

搜索

  •  

最新評論

閱讀排行榜

#

 

2.1 event_base核心事件基類數(shù)據(jù)結(jié)構(gòu)



 


      可以看出event_base是整個(gè)libevent的核心部分,它由三種結(jié)構(gòu)構(gòu)成:一個(gè)時(shí)間堆 (對應(yīng)EVLIST_TIMEOUT),一個(gè)已注冊隊(duì)列(對應(yīng)EVLIST_INSERTE),一個(gè)活躍事件隊(duì)列(對應(yīng)EVLIST_ACTIVE)。

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

      已注冊隊(duì)列對應(yīng)事件基中的eventqueue,活躍事件隊(duì)列對應(yīng)的是事件基中的activequeues[ev->ev_pri]結(jié)構(gòu)體數(shù)組。其中的ev_pri代表的是事件的優(yōu)先級,數(shù)值越小代表越高的優(yōu)先級別。

      可以通過調(diào)用event_priority_set()函數(shù)對其優(yōu)先級進(jìn)行設(shè)置,默認(rèn)插入中等優(yōu)先級(nactivequeues/2 ,即活躍隊(duì)列總數(shù)除以2)。


 

2.2 超時(shí)隊(duì)列(min-Heap最小二叉堆)

      在這里處理超時(shí)機(jī)制中使用了一個(gè)經(jīng)典的數(shù)據(jù)結(jié)構(gòu)min-Heap,源碼位于Min_heap.h

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

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

1.它是一種完全二叉樹

2.它最小的元素在頂端每個(gè)元素都比它的父節(jié)點(diǎn)大(或相等)。

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

libevent實(shí)現(xiàn)的min-Heap變量名有點(diǎn)猥瑣。

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

 

 

p可以理解成存儲(chǔ)事件指針的數(shù)組,n表示的是容量,a表示的是當(dāng)前數(shù)。

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

這個(gè)min-heap作者應(yīng)該是OOP陣營的,其中出現(xiàn)有對應(yīng)構(gòu)造函數(shù)的min_heap_ctor(),和對應(yīng)析構(gòu)函數(shù)min_heap_dtor()。


 

2.3事件隊(duì)列(雙向鏈表)

libevent中的活躍事件隊(duì)列和已注冊隊(duì)列采用的數(shù)據(jù)結(jié)構(gòu)都是用宏來實(shí)現(xiàn)的,原在freeBSD的<sys/queue.h>中已有定義,為了對Linux跨平臺(tái)支持考慮,libevent將部分代碼集中到event_internal.h里。


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

6

 

libevent用到的宏操作

宏名稱

操作

TAILQ_INIT

初始化隊(duì)列

TAILQ_FOREACH

對隊(duì)列進(jìn)行遍歷操作

TAILQ_INSERT_BEFORE

在指定元素之前插入元素

TAILQ_INSERT_TAIL

在隊(duì)列尾部插入元素

TAILQ_EMPTY

檢查隊(duì)列是否為空

TAILQ_REMOVE

從隊(duì)列中移除元素

posted @ 2010-06-24 00:23 XGuru 閱讀(1996) | 評論 (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提供了這樣的一套機(jī)制:
當(dāng)指定文件描述符中一個(gè)特定的事件發(fā)生,或者超時(shí)時(shí)間到達(dá)后執(zhí)行指定的回調(diào)函數(shù)。
此外,libevent回調(diào)功能也支持由信號或者常規(guī)的超時(shí)觸發(fā)。
注意其許可協(xié)議為BSD-style的協(xié)議,可以在商業(yè)級產(chǎn)品中采用而不必開源。

 

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.庫的使用
 

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

 

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

下面提供了一個(gè)有所省略簡單使用libevent返回系統(tǒng)時(shí)間的服務(wù)端程序片段。

 1void get_time(int fd,short event,struct event *arg)  /*獲取系統(tǒng)時(shí)間并將其往回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) /*提供給事件的回調(diào)函數(shù),接收一個(gè)連接*/
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//設(shè)置事件屬性為可讀、持續(xù),回調(diào)函數(shù)為con_accept()
31    event_add(&ev,NULL);//添加事件,未設(shè)置超時(shí)時(shí)間
32    event_dispatch();//進(jìn)入libevent主循環(huán)
33    return 0;
34}

35

2.2. 信號處理事件(對應(yīng)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); //如果調(diào)用了兩次以上,就刪除這個(gè)信號
 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//設(shè)置事件屬性為信號觸發(fā)、持續(xù),回調(diào)函數(shù)為con_accept()
16    event_add(&signal_int, NULL); //添加事件
17    event_dispatch();//進(jìn)入libevent主循環(huán)
18    return 0;
19}

20

2.3.常規(guī)超時(shí)處理(對應(yīng)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//實(shí)際上該函數(shù)對應(yīng)的是event_set(timeout, -1, 0, timeout_cb,&timeout)
21evutil_timerclear(&tv); //如果有時(shí)間清理函數(shù)則直接對應(yīng)timerclear(),如果沒有則將tv_sec和tv_usec設(shè)置為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 閱讀(6081) | 評論 (0)編輯 收藏

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

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

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

這是一個(gè)非常有趣的,從計(jì)算機(jī)科學(xué)、軟件工程、程序設(shè)計(jì)、經(jīng)驗(yàn)、學(xué)識各方面評估程序員能力的參照表。

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

漢化版地址在這里


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

Memcached是一個(gè)自由、源碼開放、高性能、分布式內(nèi)存對象緩存系統(tǒng),目的在于通過減輕數(shù)據(jù)庫負(fù)載來使動(dòng)態(tài)Web應(yīng)用程序提速。

俗話說好記性不如爛筆頭。
這個(gè)文檔是我用來記錄閱讀Memcached源碼過程中的一些經(jīng)驗(yàn),以及分析memcached的一些內(nèi)部工作機(jī)制。
希望也能給大家?guī)矸奖恪?br>
PDF目錄

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

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

參考文獻(xiàn)

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

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

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

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

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

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


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

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

 

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

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}


現(xiàn)在請仔細(xì)看第6行。
發(fā)現(xiàn)了什么?
試下編譯一下看能不能通過?


把這個(gè)程序更加簡化

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

 
再來看下產(chǎn)生的匯編代碼
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

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

Why?

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

是不是感到 啊哈!靈機(jī)一動(dòng)(aha! Insight)了呢?

擴(kuò)展資料:《C陷阱與缺陷》p33~p38




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

      深入學(xué)習(xí)了STL的內(nèi)部構(gòu)造以及一些C++深層次的機(jī)制與技巧以后,突然浮現(xiàn)出每個(gè)Programmer都要面對的問題。

      Why Programming in C++?

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

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

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

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

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

       它有沉著老練的STL庫,其中有各種數(shù)據(jù)結(jié)構(gòu)和常用算法的靈活精巧的實(shí)現(xiàn)和高度可擴(kuò)充性,有銳意進(jìn)取的boost庫,loki庫,有超重量級的網(wǎng)絡(luò)通信開發(fā)框架ACE,還有效率較高的Blitz++科學(xué)庫等。

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

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

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

       請記住這句話:好手藝人從不會(huì)責(zé)怪他的工具。語言沒有好壞之分,只有在特定環(huán)境下,具備各自的優(yōu)勢。

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

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

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

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

  by XGuru 09年12月

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

僅列出標(biāo)題
共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>
            亚洲国产欧美国产综合一区| 国产一区二区三区久久悠悠色av| 激情综合电影网| 欧美成年视频| 欧美日韩ab片| 久久精品免费电影| 美日韩精品视频| 一区二区av在线| 亚洲伊人观看| 在线日韩日本国产亚洲| 亚洲老司机av| 激情久久影院| 一区二区日韩精品| 激情婷婷久久| 一区二区电影免费在线观看| 国内精品国产成人| 99riav1国产精品视频| 狠狠入ady亚洲精品| 亚洲成色999久久网站| 欧美日韩国产精品| 久久一区二区三区国产精品 | 亚洲一区国产| 亚洲国产高清一区| 午夜一区二区三区在线观看| 亚洲精品美女在线观看| 亚洲一线二线三线久久久| 亚洲激情国产精品| 亚洲欧美另类中文字幕| 亚洲精品免费观看| 欧美亚洲免费在线| 亚洲专区一二三| 你懂的国产精品| 久久免费99精品久久久久久| 欧美性jizz18性欧美| 欧美激情精品久久久久久变态| 国产精品网站在线| 亚洲精品视频在线观看免费| 一区二区三区在线视频观看 | 米奇777在线欧美播放| 欧美视频一区| 亚洲人成免费| 女主播福利一区| 欧美国产第二页| 久久亚洲精品一区| 国产欧美一区二区白浆黑人| 日韩亚洲综合在线| 日韩午夜在线观看视频| 久久综合九色综合欧美就去吻| 欧美在线综合| 国产精品日韩在线观看| 99精品欧美| 国产精品99久久久久久久vr | 国产一区在线观看视频| 亚洲无线一线二线三线区别av| 99热在线精品观看| 欧美劲爆第一页| 亚洲精华国产欧美| 亚洲巨乳在线| 欧美大片在线影院| 91久久精品国产91性色tv| 亚洲美女精品成人在线视频| 欧美国产精品| 99pao成人国产永久免费视频| 日韩午夜激情电影| 欧美日本不卡| 99成人在线| 欧美一区=区| 国产综合在线看| 久久久久综合网| 亚洲大片一区二区三区| 9l国产精品久久久久麻豆| 欧美日韩亚洲另类| 亚洲欧美一区二区三区久久| 久久久国产精品亚洲一区| 尤物视频一区二区| 欧美成人有码| 一本色道久久综合亚洲精品婷婷 | 日韩网站在线观看| 国产精品v亚洲精品v日韩精品 | 欧美日韩国产综合视频在线观看| 日韩视频在线你懂得| 午夜精品视频在线观看| 国产性天天综合网| 欧美sm视频| 亚洲在线成人精品| 欧美~级网站不卡| 亚洲毛片视频| 国产区亚洲区欧美区| 久久婷婷成人综合色| 日韩亚洲欧美一区| 久久全国免费视频| 一区二区免费在线视频| 国产精品综合不卡av| 欧美aⅴ一区二区三区视频| 99热在线精品观看| 开元免费观看欧美电视剧网站| 亚洲日本视频| 国产伦精品一区| 欧美电影免费观看高清| 亚洲一区二区三区影院| 亚洲成人在线免费| 亚洲一区黄色| 午夜精品一区二区三区在线| 国内精品视频666| 欧美裸体一区二区三区| 欧美一区二区免费| 亚洲美女av黄| 毛片基地黄久久久久久天堂| 亚洲一区区二区| 亚洲欧洲一区二区三区| 国产午夜久久久久| 欧美网站大全在线观看| 欧美成人精品h版在线观看| 午夜免费日韩视频| 夜夜躁日日躁狠狠久久88av| 欧美国产日本在线| 久久久久久久综合日本| 午夜精品久久久久久久| 一本色道久久综合狠狠躁的推荐| 国内精品久久久久久 | 久久久99国产精品免费| 亚洲一区欧美| 亚洲午夜伦理| 艳女tv在线观看国产一区| 亚洲大胆美女视频| 欧美成人免费网| 久久视频在线视频| 久久精品免视看| 久久国产视频网| 午夜精品区一区二区三| 亚洲综合国产| 亚洲一区二区三区777| a91a精品视频在线观看| 亚洲三级视频| 亚洲精品国偷自产在线99热| 在线欧美影院| 亚洲高清久久| 亚洲国产日本| 亚洲级视频在线观看免费1级| 黄色另类av| 在线成人国产| 亚洲国产精品t66y| 亚洲日本va午夜在线影院| 亚洲免费成人| 国产精品99久久久久久久久久久久 | 久久精品国产久精国产思思| 欧美一区二视频| 久久久久久久综合日本| 狂野欧美一区| 亚洲第一中文字幕| 亚洲区免费影片| 一区二区av| 午夜视黄欧洲亚洲| 久久久五月婷婷| 欧美激情一区二区三区在线视频| 欧美日本一区二区高清播放视频| 欧美日韩精品国产| 国产精品免费网站在线观看| 国产欧美一区二区三区在线老狼| 国产丝袜一区二区| 亚洲国产精品嫩草影院| 99精品视频一区| 欧美在线视频一区| 欧美gay视频| 一本色道久久加勒比88综合| 欧美一区二区在线免费播放| 免费欧美日韩| 国产精品―色哟哟| 99国产一区二区三精品乱码| 欧美一区二区三区男人的天堂 | 亚洲一区二区三区涩| 欧美中文日韩| 亚洲三级影院| 午夜视黄欧洲亚洲| 欧美精品1区| 国产综合色在线| 亚洲新中文字幕| 米奇777在线欧美播放| 一区二区久久久久久| 久久精品欧洲| 国产精品区一区二区三| 亚洲激情第一页| 久久aⅴ国产紧身牛仔裤| 亚洲国产成人午夜在线一区| 亚洲男女自偷自拍图片另类| 免费在线视频一区| 国产一区二区三区高清播放| 夜夜爽99久久国产综合精品女不卡 | 亚洲激情在线观看视频免费| 欧美一区二区三区电影在线观看| 欧美激情在线| 久久精品视频在线看| 国产欧美精品日韩区二区麻豆天美 | 欧美国产日韩一区| 一区二区三区在线看| 欧美在线日韩| 亚洲一区二区黄色| 欧美日韩中文| 99国产精品一区| 亚洲国产日韩欧美综合久久|