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

MySQL源碼學(xué)習(xí)之Connection Manager詳解

數(shù)據(jù)庫(kù) MySQL
本文我們主要介紹了MySQL源碼學(xué)習(xí)之Connection Manager,它包括:連接的線程數(shù)、初始化網(wǎng)絡(luò)設(shè)置、連接的方式、Socket管理創(chuàng)新線程以及新線程處理流程的知識(shí),希望能夠?qū)δ兴鶐椭?/div>

MySQL數(shù)據(jù)庫(kù)Connection Manager的相關(guān)知識(shí)是本文我們主要要介紹到內(nèi)容,接下來(lái)就讓我們一起來(lái)了解一下吧。

1.連接的線程數(shù)

MySQL支持單線程和多線程兩種連接線程數(shù)。如果是單線程,則在同一時(shí)刻,只能有一個(gè)connection連接到MySQL,其他的連接會(huì)被掛起。如果是多線程,則同一時(shí)刻可以支持多個(gè)connection同時(shí)連接到服務(wù)器。可以通過(guò)設(shè)置服務(wù)器的啟動(dòng)參數(shù)來(lái)設(shè)定連接的線程數(shù):

  1. mysqld.exe --thread-handling=no-threads  
  2. mysqld.exe --thread-handling=one-thread-per-connection 

 

服務(wù)器如何通過(guò)參數(shù)來(lái)選擇使用哪種方式的呢?且看服務(wù)器中的分支代碼:

  1. #ifdef EMBEDDED_LIBRARY  
  2. one_thread_scheduler(&thread_scheduler);  
  3. #else  
  4. if (global_system_variables.thread_handling <=  
  5. SCHEDULER_ONE_THREAD_PER_CONNECTION)  
  6. one_thread_per_connection_scheduler(&thread_scheduler);  
  7. else if (global_system_variables.thread_handling == SCHEDULER_NO_THREADS)  
  8. one_thread_scheduler(&thread_scheduler);  
  9. else  
  10. pool_of_threads_scheduler(&thread_scheduler); /* purecov: tested */  
  11. #endif 

 

這段代碼出現(xiàn)在get_options函數(shù)中,此函數(shù)是根據(jù)傳入的服務(wù)器參數(shù),設(shè)置相應(yīng)參數(shù)的模式。由這段代碼可以看出,如果定義了EMBEDDED_LIBRARY宏定義(估計(jì)應(yīng)該是嵌入式使用),則調(diào)用one_thread_scheduler,即使用單線程。如果參數(shù)小于等于SCHEDULER_ONE_THREAD_PER_CONNECTION,則調(diào)用one_thread_per_connection_scheduler,即每個(gè)連接一個(gè)線程,即多線程。

至于global_system_variables.thread_handling是如何進(jìn)行設(shè)置的呢?其實(shí)就是根據(jù)我們傳遞給服務(wù)器的參數(shù)--thread-handling進(jìn)行設(shè)置的,參數(shù)的設(shè)置統(tǒng)一在函數(shù)get_options中,其調(diào)用mysqld_get_one_option,其中有個(gè)分支,代碼如下:

 

  1. case OPT_THREAD_HANDLING:  
  2. {  
  3. global_system_variables.thread_handling=  
  4. find_type_or_exit(argument, &thread_handling_typelib, opt->name)-1;  
  5. break;  

 

對(duì)參數(shù)初始化有興趣的可以具體的看下get_options這個(gè)函數(shù),這里就不詳細(xì)講解了。 我們來(lái)看下one_thread_scheduler和one_thread_per_connection_scheduler的源代碼,看下他們都做了些什么?

 

  1. void one_thread_scheduler(scheduler_functions* func)  
  2. {  
  3. func->max_threads1;  
  4. #ifndef EMBEDDED_LIBRARY  
  5. func->add_connectionhandle_connection_in_main_thread;  
  6. #endif  
  7. func->init_new_connection_threadinit_dummy;  
  8. func->end_threadno_threads_end;  
  9. }  
  10.  
  11. void one_thread_per_connection_scheduler(scheduler_functions* func)  
  12. {  
  13. func->max_threadsmax_connections;  
  14. func->add_connectioncreate_thread_to_handle_connection;  
  15. func->end_threadone_thread_per_connection_end;  
  16. }  

 

原來(lái)就是設(shè)置了一個(gè)結(jié)構(gòu)體中scheduler_functions的參數(shù),只不過(guò)這些參數(shù)是一些函數(shù)指針罷了,也就是說(shuō)在具體的調(diào)用中,

只需要調(diào)用add_connection或end_thread即可,不需要知道到底是調(diào)用了哪個(gè)函數(shù),這大概就是一種變形的多態(tài)性吧。

2.初始化網(wǎng)絡(luò)配置

網(wǎng)絡(luò)配置比較簡(jiǎn)單,就是設(shè)置端口,創(chuàng)建套接字,綁定端口,監(jiān)聽(tīng)端口。實(shí)現(xiàn)全部集中在network_init函數(shù)中,由于這個(gè)函數(shù)確

實(shí)沒(méi)什么好講的,如果對(duì)socket不熟悉的話,可以去網(wǎng)上搜索下相關(guān)知識(shí)。這里直接給出相應(yīng)的偽代碼:

 

  1. network_init  
  2. {  
  3. set_ports; //設(shè)置端口號(hào),#define MYSQL_PORT 3306  
  4. socket; //創(chuàng)建套接字  
  5. bind; //綁定端口號(hào)  
  6. listen; //監(jiān)聽(tīng)端口號(hào)  

 

3.連接的方式

進(jìn)程間通信的方式不止是SOCKET,還有其他很多方式。Mysql支持三種連接方式:namepipe、socket和shared memory,即命名管道、套接字和共享內(nèi)存的方式。這三種方式是可以共存的。默認(rèn)只使用套接字。

TCP/IP套接字方式是MySQL在任何平臺(tái)下都提供的連接方式,也是網(wǎng)絡(luò)中使用得最多的一種方式。這種方式在TCP/IP連接上建立一個(gè)基于網(wǎng)絡(luò)的連接請(qǐng)求,一般情況下客戶端在一臺(tái)服務(wù)器上,而MySQL實(shí)例在另一臺(tái)服務(wù)器上,這兩臺(tái)機(jī)器通過(guò)一個(gè)TCP/IP網(wǎng)絡(luò)連接。

例如,我可以在Windows服務(wù)器下請(qǐng)求一臺(tái)遠(yuǎn)程Linux服務(wù)器下的MySQL實(shí)例。在Windows 2000、Windows XP、Windows 2003和Windows Vista以及在此之后的 Windows操作系統(tǒng)中,如果兩個(gè)需要通信的進(jìn)程在同一臺(tái)服務(wù)器上,那么可以使用命名管道,SQL Server數(shù)據(jù)庫(kù)默認(rèn)安裝后的本地連接也使用命名管道。在MySQL數(shù)據(jù)庫(kù)中,需在配置文件中啟用--enable-named-pipe選項(xiàng)。

在MySQL 4.1之后的版本中,MySQL還提供了共享內(nèi)存的連接方式,在配置文件中添加--shared-memory。如果想使用共享內(nèi)存的方式,在連接時(shí),Mysql客戶端還必須使用-protocol=memory選項(xiàng)。啟動(dòng)時(shí)可以通過(guò)下面的參數(shù)進(jìn)行設(shè)置。

 

  1. mysqld.exe --enable-named-pipe  
  2. mysqld.exe --shared-memory 

 

除了在啟動(dòng)時(shí)進(jìn)行參數(shù)設(shè)置外,也可以通過(guò)修改MY.INI文件進(jìn)行設(shè)置。我們來(lái)看下源碼中選擇連接方式的分支函數(shù)handle_connections_methods:

 

  1. handle_connections_methods()  
  2. {  
  3. if (hPipe != INVALID_HANDLE_VALUE)  
  4. {  
  5. handler_count++;  
  6. if (pthread_create(&hThread,&connection_attrib,  
  7. handle_connections_namedpipes, 0))  
  8. {  
  9. sql_print_warning("Can't create thread to handle named pipes");  
  10. handler_count--;  
  11. }  
  12. }  
  13. if (have_tcpip && !opt_disable_networking)  
  14. {  
  15. handler_count++;  
  16. if (pthread_create(&hThread,&connection_attrib,  
  17. handle_connections_sockets, 0))  
  18. {  
  19. sql_print_warning("Can't create thread to handle TCP/IP");  
  20. handler_count--;  
  21. }  
  22. }  
  23.  
  24. if (opt_enable_shared_memory)  
  25. {  
  26. handler_count++;  
  27. if (pthread_create(&hThread,&connection_attrib,  
  28. handle_connections_shared_memory, 0))  
  29. {  
  30. sql_print_warning("Can't create thread to handle shared memory");  
  31. handler_count--;  
  32. }  
  33. }  

 

由于對(duì)于namepipe和memory share的通信方式不太了解,這里只研究socket的通信方式。從代碼中可以看出,handle_connections_sockets便是socket的設(shè)置,我們就來(lái)看下它。

4.socket管理創(chuàng)建新線程

socket管理其實(shí)比較簡(jiǎn)單,直接給出其偽代碼:

 

  1. handle_connections_sockets  
  2. {  
  3. select; //監(jiān)視socket文件描述符  
  4. new_socket = accept;//處理到來(lái)的客戶端連接  
  5. thd = new THD;創(chuàng)建THD類  
  6. vio_tmp = vio_new(new_socket,VIO_TYPE_TCPIP, 0); //初始化VIO結(jié)構(gòu)體  
  7. my_net_init(&thd->net, vio_tmp);//初始化thd的net結(jié)構(gòu)體  
  8. create_new_thread(thd);//為這個(gè)連接創(chuàng)建一個(gè)新的線程,如果是單線程模式的話,就不會(huì)創(chuàng)建一個(gè)新線程  

 

首先是select函數(shù)進(jìn)行監(jiān)視socket端口,如果監(jiān)控到有連接,則通過(guò)accept函數(shù)接受客戶端的連接,然后新建一個(gè)THD類,將連接參數(shù)全部設(shè)置到THD類的參數(shù)上,最后調(diào)用create_new_thread函數(shù),這個(gè)函數(shù)便是重點(diǎn)。 我們進(jìn)入這個(gè)函數(shù),看下做了啥。

 

  1. create_new_thread  
  2. {  
  3. ++connection_count;//全局連接數(shù)自增  
  4. thread_count++; //全局線程數(shù)自增  
  5. thread_scheduler.add_connection(thd);//真正創(chuàng)建線程  

 

So easy,首先將全局連接數(shù)+1,全局線程數(shù)+1,然后調(diào)用add_connection函數(shù),這個(gè)函數(shù)就是我們?cè)谏厦娴谝徊皆O(shè)置連接的

線程數(shù)中,one_thread_scheduler和one_thread_per_connection_scheduler中設(shè)置的一個(gè)參數(shù)。這兩者的區(qū)別便是是否創(chuàng)建了

一個(gè)新的線程來(lái)處理到來(lái)的連接。one_thread_scheduler是單線程方式,木有新建線程。我們重點(diǎn)研究one_thread_per_connection_scheduler,其設(shè)置的add_connection函數(shù)為create_thread_to_handle_connection:

 

  1. create_thread_to_handle_connection(THD *thd)  
  2. {  
  3. thread_created++;  
  4. threads.append(thd); // 創(chuàng)建線程數(shù)自增,并加入到threads鏈表上  
  5. pthread_create(&thd->real_id,&connection_attrib,  
  6. handle_one_connection,  
  7. (void*) thd);//這就是真正創(chuàng)建線程的地方了,函數(shù)便是handle_one_connection  

 

可見(jiàn),最后調(diào)用了pthread_create函數(shù),這個(gè)函數(shù)便是創(chuàng)建一個(gè)新的線程,新線程的處理函數(shù)為handle_one_connection.

5.新線程處理流程

新線程處理函數(shù)為handle_one_connection,到此位置,一個(gè)新的connection被一個(gè)新創(chuàng)建的線程所單獨(dú)處理。我們看下其中

是如何進(jìn)行處理的。

 

  1. handle_one_connection(void *arg)  
  2. {  
  3. for (;;)  
  4. {  
  5. lex_start(thd); //初始化詞法分析結(jié)構(gòu)體  
  6. login_connection(thd); //用戶認(rèn)證,失敗報(bào)錯(cuò)  
  7. prepare_new_connection_state(THD* thd);//Initialize THD to handle queries  
  8. while (!net->error && net->vio != 0 && //循環(huán)處理command  
  9. !(thd->killed == THD::KILL_CONNECTION))  
  10. {  
  11. if (do_command(thd))  
  12. break; //處理失敗跳出  
  13. }  
  14. end_connection(thd); //關(guān)閉連接  
  15. close_connection(thd, 0, 1);  
  16. thread_scheduler.end_thread(thd,1);//結(jié)束線程  
  17. return 0;  
  18. }  

 

首先進(jìn)行了詞法分析結(jié)構(gòu)體的初始化,然后進(jìn)行用戶認(rèn)證,認(rèn)證成功后通過(guò)do_command循環(huán)執(zhí)行客戶端發(fā)過(guò)來(lái)的命令。

6.總結(jié)

整個(gè)connection manager的流程十分清晰,單線程的連接一般很少使用,大多使用多線程方式。多線程連接中其實(shí)還涉及到線程緩沖池的概念,即如果一個(gè)連接斷開(kāi)后,其所創(chuàng)建的線程不會(huì)被銷毀掉,而是放到緩沖池中,等待下一個(gè)新的connection到來(lái)時(shí),首先去線程緩沖池查找是否有空閑的線程,有的話直接使用,木有的話才去創(chuàng)建新的線程來(lái)管理這個(gè)connection。

關(guān)于MySQL數(shù)據(jù)庫(kù)Connection Manager的相關(guān)知識(shí)就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

【編輯推薦】

  1. MySQL數(shù)據(jù)庫(kù)my.cnf配置文件注釋詳解
  2. SQL Server數(shù)據(jù)庫(kù)復(fù)制失敗的原因及解決方案
  3. SQL Server 2005數(shù)據(jù)庫(kù)游標(biāo)調(diào)用函數(shù)實(shí)例解析
  4. MySQL數(shù)據(jù)庫(kù)中EXPLAIN的使用及其注意事項(xiàng)詳解
  5. SQL Server數(shù)據(jù)庫(kù)用視圖來(lái)處理復(fù)雜的數(shù)據(jù)查詢關(guān)系
責(zé)任編輯:趙鵬 來(lái)源: 博客園
相關(guān)推薦

2022-10-09 08:53:06

存儲(chǔ)容量SSD

2011-06-23 13:10:39

Python 對(duì)象機(jī)制

2011-04-22 14:14:21

MySQL偷窺線程

2009-07-08 13:22:30

JDK源碼分析Set

2023-03-15 16:16:07

鴻蒙Server端

2021-09-02 07:00:01

Glide流程Android

2017-06-07 14:58:39

Redis源碼學(xué)習(xí)Redis事務(wù)

2023-02-08 15:32:56

新模塊操作系統(tǒng)

2011-08-25 15:41:42

Lua源碼

2022-03-29 08:31:18

RabbitMQMQ客戶端

2021-09-07 06:40:25

AndroidLiveData原理

2011-06-23 14:05:32

Qt 事件機(jī)制

2021-09-12 07:30:10

配置

2017-04-07 14:30:26

2023-07-10 08:43:53

SpringIDEA

2016-09-20 10:15:49

LaravelPHPContainer

2023-03-07 10:43:52

AndroidFramework測(cè)試

2016-09-20 10:26:25

LaravelPHPMiddleware

2019-01-04 15:14:18

2019-02-12 15:04:09

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

caopeng视频| 日韩在线电影一区| 国产亚洲欧美久久久久| 国产精品午夜av| 日韩欧美国产一区二区| 午夜精品一区二区三区四区| 国产理论片在线观看| 国产精品红桃| 亚洲性生活视频| 中文字幕久久久久久久| 欧美日韩123区| 日本欧美一区二区| 国产劲爆久久| 国产婷婷一区二区| 97久久夜色精品国产九色| 国产精品suv一区二区| 精品理论电影在线| 日韩精品一区二区三区四区视频 | 韩国中文字幕hd久久精品| 欧美一级视频| 欧美精品在线观看91| 精品人妻一区二区三区香蕉| 亚洲欧洲专区| 色噜噜狠狠色综合欧洲selulu| 日本精品免费视频| 高清av电影在线观看| 国产99一区视频免费| 国产精品久久久久久久美男| 国产精品成人网站| 久久久久久久久久久妇女| 亚洲欧美国产日韩中文字幕| 成年人看片网站| 精品久久毛片| 日本丶国产丶欧美色综合| 国产成人艳妇aa视频在线| 日韩成人影视| 国产亚洲欧洲一区高清在线观看| 国产尤物99| 精品人妻午夜一区二区三区四区 | 日韩免费观看av| 日韩女优在线观看| 亚洲午夜伦理| 久99九色视频在线观看| 美国一级片在线观看| 国产一区二区三区四区二区| 日韩av在线播放资源| 亚洲美女高潮久久久| 亚洲精品不卡在线观看| 欧美二区三区91| 中文字幕一区二区三区四区在线视频| 中文字幕乱码中文乱码51精品| 亚洲一区二区精品视频| 日韩一级特黄毛片| 2021国产在线| 一级精品视频在线观看宜春院 | 亚洲一区二区三区无码久久| 91蜜桃臀久久一区二区| 欧美成人vr18sexvr| 成年人性生活视频| 精品国产18久久久久久二百| 欧美精品色一区二区三区| 亚洲xxx在线观看| 9999在线精品视频| 91麻豆精品国产91久久久使用方法| 国产视频1区2区3区| 久久亚洲国产精品尤物| 91精品国产综合久久久久久| 韩国一区二区在线播放| 日韩精品一区国产| 亚洲成人av片在线观看| 国产xxxxxxxxx| 羞羞色国产精品网站| 亚洲欧美国产日韩中文字幕| 男人的天堂av网| 波多野结衣在线播放一区| 欧美一级二级视频| 久久久欧美精品sm网站| 日产精品久久久一区二区| jizzjizz在线观看| 亚洲欧美一区二区三区孕妇| 女人床在线观看| 丁香花在线影院| 精品久久久久久中文字幕一区奶水 | 中文区中文字幕免费看| 久久se精品一区精品二区| 91超碰rencao97精品| 日韩一级免费毛片| 久久蜜桃av一区二区天堂 | 国产精品老女人精品视频| 一级片在线观看视频| 欧美三级免费看| 亚洲电影一二三区| 成年人的黄色片| 小黄鸭精品aⅴ导航网站入口| 欧美女v视频| 免费一区二区视频| 51精品国产人成在线观看| 手机在线观看免费av| 国产精品毛片aⅴ一区二区三区| 亚洲欧美偷拍卡通变态| 和岳每晚弄的高潮嗷嗷叫视频| 91av亚洲| 制服丝袜中文字幕一区| 懂色av粉嫩av蜜乳av| 久久精品不卡| 91av在线视频观看| 91午夜交换视频| 91麻豆国产精品久久| 青青草原国产免费| 中文字幕一区久| 日韩三级高清在线| 久久久久久久毛片| 激情欧美一区二区三区| 国产免费成人av| 天堂a中文在线| 日韩美女视频一区二区| 无码aⅴ精品一区二区三区浪潮 | 亚洲一区二区福利视频| 亚洲婷婷丁香| 欧美高清视频在线| 成人一二三四区| 高清av一区二区| 一区二区三区精品国产| 亚洲精品一级二级| 亚洲国产日韩欧美在线动漫| www.av成人| 日本成人中文字幕| 久久大香伊蕉在人线观看热2| www.在线视频| 欧美在线三级电影| 我和岳m愉情xxxⅹ视频| 伊人精品在线| av成人午夜| 麻豆av在线导航| 精品视频123区在线观看| www.久久av| 一二三区精品| 精品久久精品久久| 国产高潮在线| 欧美精品一区二区三区久久久| 26uuu成人网| 激情综合网av| 久久久国产精华液999999| 国产亚洲精品精品国产亚洲综合| 亚洲精品在线看| 国产原创视频在线| 久久伊人中文字幕| 欧美激情国产精品日韩| 最新精品国偷自产在线| 欧美一级视频一区二区| 天天操天天射天天| 午夜精品123| 第四色在线视频| 一区二区动漫| 欧美一级二级三级| 澳门av一区二区三区| 亚洲午夜精品久久久久久久久久久久| 亚洲精品午夜国产va久久成人| www.色综合.com| 欧美日本视频在线观看| 乱中年女人伦av一区二区| 91精品国产91久久久久久吃药 | 成人在线视频免费| 国产一区二区三区丝袜| 久久久久久av无码免费看大片| 国产精品视频观看| 久久精品视频在线观看免费| 欧美国产91| 国内一区在线| 456亚洲精品成人影院| 一区二区在线免费视频| 国产免费一区二区三区免费视频| 一区二区三区在线观看网站| 乱码一区二区三区| 亚洲在线黄色| 一区二区在线中文字幕电影视频| 久久国际精品| 91国产精品91| 粉嫩一区二区三区国产精品| 3751色影院一区二区三区| 久草视频手机在线观看| 久久蜜桃av一区精品变态类天堂| 手机在线成人免费视频| 亚洲欧美亚洲| 女女同性女同一区二区三区91| 97人人做人人爽香蕉精品| 久久综合伊人77777| 婷婷五月综合久久中文字幕| 91国模大尺度私拍在线视频| 久久久久久久久久久久久女过产乱| 成人网页在线观看| 日韩福利视频在线| 欧美精品入口| 欧美日韩精品不卡| 欧美欧美在线| 国产第一区电影| 午夜av在线免费观看| 亚洲欧美国内爽妇网| 99久久久国产精品无码网爆| 疯狂做受xxxx欧美肥白少妇| 我要看黄色一级片| 91视频在线观看免费| 精品综合久久久久| 久久蜜桃精品| 精品人妻大屁股白浆无码| 精品国产乱码久久久| 国产欧美在线一区二区| 日本午夜精品久久久久| 青草热久免费精品视频| 超碰超碰在线| 一区二区中文字幕| 视频一区 中文字幕| 欧美精品欧美精品系列| 一级黄色在线视频| 亚洲成人精品一区| 国产女人18水真多毛片18精品| 久久综合999| 亚洲精品乱码久久久久久蜜桃欧美| 蜜臀91精品一区二区三区| 欧美日本视频在线观看| 欧美日本二区| a级黄色片网站| 欧美限制电影| 麻豆av一区二区三区久久| 波多野结衣在线一区二区| 成人激情视频网| 一呦二呦三呦精品国产| 91精品成人久久| 丝袜中文在线| 久久亚洲精品一区| 免费超碰在线| 综合激情国产一区| 国产视频三级在线观看播放| 日韩成人在线播放| 少妇无码一区二区三区| 精品人伦一区二区色婷婷| 国产一区二区小视频| 欧美色图在线观看| av首页在线观看| 欧美性猛交xxxx乱大交蜜桃 | 亚洲天堂久久| 999一区二区三区| 狠狠综合久久av一区二区老牛| 国产系列第一页| 午夜精品毛片| 糖心vlog在线免费观看| 艳女tv在线观看国产一区| 亚洲综合激情五月| 亚洲欧美亚洲| 妺妺窝人体色www看人体| 欧美特黄一级| 欧日韩免费视频| 伊人影院久久| 免费av观看网址| 国产精品日韩| 成人黄色一区二区| 蓝色福利精品导航| 色姑娘综合天天| 国产91丝袜在线18| 久久久久国产精品无码免费看| 91一区一区三区| 亚洲av无码国产精品久久| 久久精品欧美一区二区三区不卡 | 国产日韩一级片| 日韩午夜激情免费电影| 性生活黄色大片| 精品国产在天天线2019| 手机看片1024国产| 亚洲美女自拍视频| 视频一区二区三区不卡| 大胆欧美人体视频| 9999在线视频| 日韩女优人人人人射在线视频| 成人国产一区二区三区精品麻豆| 成人久久久久爱| 97se亚洲国产一区二区三区| 蜜桃av色综合| 欧美wwwww| 国产曰肥老太婆无遮挡| 国产欧美日本| 看看黄色一级片| caoporn国产精品| 国产破处视频在线观看| 亚洲一线二线三线久久久| 日韩欧美成人一区二区三区| 欧美日韩视频第一区| 亚洲精品久久久久avwww潮水| 日韩精品中文字幕久久臀| 日本不卡在线| 97成人精品区在线播放| 成人在线视频免费| 精品日产一区2区三区黄免费| 日本在线电影一区二区三区| 亚洲人成亚洲人成在线观看| 久久这里只有精品9| 91精品久久久久久久99蜜桃| 香蕉视频网站在线| 久久亚洲精品中文字幕冲田杏梨 | 夜夜嗨av一区二区三区| aaaaaa毛片| 日韩一级完整毛片| 男女网站在线观看| 欧美丰满片xxx777| 欧美色999| 国产伦精品一区二区三区免费视频| 国产欧美日韩视频在线| 黄色三级中文字幕| 老司机免费视频一区二区三区| 亚洲天堂2024| 亚洲天堂a在线| 69xxxx国产| 亚洲精品xxxx| 宅男网站在线免费观看| 国产精品r级在线| 久草在线综合| 国产 国语对白 露脸| 美女一区二区视频| 99久久久无码国产精品性| 亚洲国产日韩a在线播放性色| 91成品人影院| 一本色道久久综合亚洲精品小说 | 男人的天堂免费| 波多野结衣在线观看一区二区三区| 成年女人18级毛片毛片免费| 激情伊人五月天久久综合| 久久成人激情视频| 精品福利免费观看| 亚洲精品成人电影| 久久久成人精品| 欧美高清xxx| 欧美日本亚洲| 亚洲毛片一区| 中文字幕1区2区| 亚洲精品视频在线观看网站| 亚洲一级特黄毛片| 在线观看精品国产视频| 激情都市亚洲| 久久综合伊人77777麻豆| 亚洲一级电影| 天天躁日日躁狠狠躁av| 亚洲一区二区综合| 成人激情四射网| 欧美丰满少妇xxxx| 91综合精品国产丝袜长腿久久| 日本免费黄色小视频 | 色哟哟免费视频| 1024国产精品| 国产精品无码一区二区桃花视频| 色哟哟入口国产精品| 狠狠久久伊人中文字幕| 性欧美精品一区二区三区在线播放| 久久精品亚洲| 国产精品一二三区在线观看| 91黄色小视频| 成全电影播放在线观看国语| 国产精品99久久久久久www| 欧美老女人另类| 亚洲一区在线不卡| 成人免费在线播放视频| www.久久精品.com| 高清亚洲成在人网站天堂| 精品三级av在线导航| 欧美性大战久久久久xxx| 久久久久久久久久久久久久久99 | 亚洲午夜一区| 成人影视免费观看| 91国内精品野花午夜精品| 1769在线观看| 99视频免费观看| 国产一级久久| 日本欧美一区二区三区不卡视频| 欧美日韩精品一区视频| 成人直播在线| 精品国产一二| 蜜桃视频在线一区| 欧美日韩人妻精品一区二区三区| 精品免费视频.| 日产精品一区| 中文字幕色呦呦| xf在线a精品一区二区视频网站| 亚洲男人的天堂在线视频| 久久性天堂网| 日本一欧美一欧美一亚洲视频| 久久精品五月天| 99久久精品免费看| 亚洲第一在线综合在线| 欧美日韩国产观看视频| 你懂的视频在线一区二区| 久久国产日韩欧美精品| 精品人妻在线播放| 亚洲色无码播放| 国产精品亚洲四区在线观看| 浮妇高潮喷白浆视频| 国产精品无遮挡| 人成网站在线观看| 国产精品夜间视频香蕉| 亚洲每日更新| 成人免费黄色小视频| 亚洲欧美日韩中文在线| 视频一区国产|