精品欧美一区二区三区在线观看 _久久久久国色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)

久久久久人妻一区精品色| 成人在线视频一区二区| 亚洲色图欧美制服丝袜另类第一页| 欧美女人性生活视频| 99re热久久这里只有精品34| 国产一区不卡在线| 97在线看福利| 久久一级免费视频| 久久香蕉网站| 欧美日韩国产一区| 蜜臀av无码一区二区三区| www.91在线| 懂色一区二区三区免费观看| 国产精品大陆在线观看| 久久网中文字幕| 不卡中文字幕| 日韩福利在线播放| 一二三级黄色片| 二区三区不卡| 亚洲mv大片欧洲mv大片精品| 伊人久久大香线蕉成人综合网| 天天操天天舔天天干| 国产一区二区免费视频| 国产成人avxxxxx在线看 | 综合久草视频| 欧美午夜宅男影院在线观看| 免费日韩在线观看| 1pondo在线播放免费| 成人av电影在线网| 91在线视频免费| 波多野结衣视频观看| 亚洲国产裸拍裸体视频在线观看乱了中文 | 久久免费福利视频| www.av成人| 成人综合久久| 亚洲最新在线视频| 欧美在线一级片| 蜜桃在线一区| 91精品一区二区三区久久久久久| 欧美成人免费高清视频| 蜜桃视频www网站在线观看| 一区二区三区欧美亚洲| 香蕉精品视频在线| 幼a在线观看| 国产日韩欧美一区二区三区综合| 久久国产精品 国产精品| 亚洲AV无码精品国产| 国产精品一区二区久久不卡| 国产精品中文在线| 国产99久久久久久免费看| 久久精品1区| 1769国产精品| www成人在线| 国产欧美一级| 91av视频在线免费观看| 久久久久久久久影院| 最新日韩av| 97碰碰碰免费色视频| 欧美一级视频免费观看| 中文亚洲免费| 国产福利视频一区| 中文字幕精品一区二| 久久精品久久综合| 亚洲a在线观看| www.97超碰| 成人av网站在线观看免费| 国产三区精品| 欧美女同网站| 中文av一区二区| 一级一片免费播放| 91蜜桃在线视频| 亚洲第一av色| www日韩视频| 国产91欧美| 欧美一区二区在线看| 91av免费观看| 色婷婷av一区二区三区丝袜美腿| 亚洲男人的天堂在线| 快灬快灬一下爽蜜桃在线观看| 99久久婷婷| 欧美精品18videos性欧美| 国产高潮久久久| 蜜臀精品一区二区三区在线观看| 成人在线视频网站| 黄色一级a毛片| 久久综合久久综合久久综合| 亚洲精品视频一二三| 香蕉成人app免费看片| 欧美性猛交xxxx免费看| 污污网站免费看| 97久久亚洲| 一区二区三区视频免费| 国产女片a归国片aa| 销魂美女一区二区三区视频在线| 国产又爽又黄的激情精品视频| 成人激情四射网| 久久久国产午夜精品| 亚洲av综合色区| 黄色在线网站噜噜噜| 欧美视频一区二区三区四区| 性一交一黄一片| 开心激情综合| 久久这里有精品视频| 久久久久久久久久久影院| 黄色资源网久久资源365| 精品免费视频123区| 日本黄色片在线观看| 婷婷久久综合九色综合绿巨人 | 国产成人亚洲精品自产在线| 日产国产高清一区二区三区| 国产精品区免费视频| 91在线直播| 大伊人狠狠躁夜夜躁av一区| 三级黄色片播放| 精品国精品国产自在久国产应用| 久久久久国产精品www| 在线免费av片| 久久久久久免费| 日韩精品在线视频免费观看| 四虎影视国产精品| 国产亚洲欧美日韩美女| 91美女免费看| 成人免费看的视频| 大陆极品少妇内射aaaaaa| 成人福利片在线| 亚洲欧美制服丝袜| 国产成人在线播放视频| 国产精品中文字幕欧美| 中文字幕日韩精品久久| 成人啊v在线| 日韩黄在线观看| 亚洲精品午夜久久久久久久| 国产aⅴ综合色| 男人j进女人j| 精品国产亚洲一区二区在线观看 | 美腿丝袜亚洲综合| 日韩资源av在线| 日韩伦理福利| 亚洲精品aⅴ中文字幕乱码| 激情综合网五月天| 国模少妇一区二区三区| 椎名由奈jux491在线播放 | 欧美日韩的一区二区| 欧美做受xxxxxⅹ性视频| 国产精品婷婷| 九九九九久久久久| ririsao久久精品一区| 欧美刺激脚交jootjob| 欧美爱爱小视频| 福利91精品一区二区三区| 青青青在线观看视频| 日韩三级不卡| 久久久久中文字幕2018| 日韩中文字幕影院| 亚洲aⅴ怡春院| 国产精品久久久久久久无码| 在线亚洲国产精品网站| 欧美凹凸一区二区三区视频| 新版的欧美在线视频| 亚洲欧美三级伦理| 凹凸精品一区二区三区| 国产精品久久免费看| 日日干日日操日日射| 综合天堂av久久久久久久| 99久久无色码| 亚洲性受xxx喷奶水| 国产一区二区三区视频免费| 一区二区三区黄色片| 夜夜精品视频一区二区| 国产乱了高清露脸对白| 日本视频一区二区| 小说区视频区图片区| 中文在线综合| 欧美一级淫片播放口| 91在线播放网站| 欧美一卡在线观看| 可以免费看的av毛片| 国产精品水嫩水嫩| 三大队在线观看| 亚洲女人av| 一级二级三级欧美| aaa国产精品| 日韩美女在线观看| 成人影院在线看| 日韩av影视在线| 中文字幕日韩国产| 亚洲午夜av在线| 中文字幕av久久爽一区| 国产精品1024久久| 18禁男女爽爽爽午夜网站免费| 成人毛片免费看| 超碰国产精品久久国产精品99| 中文av在线全新| 久久综合伊人77777| 欧美日韩激情视频一区二区三区| 欧美精选午夜久久久乱码6080| 国产成人精品亚洲男人的天堂| 中文一区二区完整视频在线观看 | 国产视频一区二区三| 天天爽夜夜爽夜夜爽精品视频| 精品少妇一区二区三区密爱| 成人精品视频.| 三上悠亚在线一区| 99视频一区| 日本丰满少妇黄大片在线观看| 啄木系列成人av电影| av蓝导航精品导航| 成人国产网站| **欧美日韩vr在线| 污片在线免费观看| 神马久久久久久| 免费一级在线观看播放网址| 日韩女优av电影| 91成年人视频| 在线观看欧美日本| 国产成人自拍视频在线| 亚洲另类中文字| 亚洲精品自拍视频在线观看| 久久久久久久av麻豆果冻| 国产吃瓜黑料一区二区| 韩国av一区二区| 国产福利影院在线观看| 99国产精品视频免费观看一公开| 永久免费看av| 欧美顶级大胆免费视频| 欧美日韩一区二区视频在线| 美女一区二区在线观看| 国产精品播放| 一区二区在线视频观看| 91网站在线看| 亚洲一区导航| 成人国产精品一区二区| 成人做爰免费视频免费看| 国产91精品青草社区| 岛国av在线播放| 国内精品久久久久久久久| 久久av色综合| 久久久久亚洲精品| 丁香花高清在线观看完整版| 欧美黄色www| 人妖欧美1区| 色综合久久悠悠| 久久五月精品中文字幕| 欧美激情视频网站| 黑人极品ⅴideos精品欧美棵| 欧美成人中文字幕| 中文在线免费| 欧美国产精品日韩| 成人性生交大片免费看在线播放| 欧美黑人又粗大| caoporn视频在线| 91精品国产亚洲| 成人黄色免费短视频| 国产精品夫妻激情| 国产第一亚洲| 91九色单男在线观看| 青草伊人久久| 国产精品高清一区二区三区| 老司机精品在线| 欧美日本国产精品| 欧美在线色图| 一本—道久久a久久精品蜜桃| 亚洲大全视频| 国产精品又粗又长| 久久不射网站| 最新天堂在线视频| 国产精品中文字幕一区二区三区| 95视频在线观看| 91视频在线观看免费| 国产又粗又猛又爽又黄av | 亚洲天堂视频在线观看| 在线免费av电影| 欧美美女操人视频| 黄色在线观看www| 国产精品亚洲片夜色在线| 国产在线一区不卡| 久久er99热精品一区二区三区| 国产中文字幕一区二区三区| 中文字幕制服丝袜在线| 在线观看视频日韩| 欧美国产日韩在线播放| 韩国毛片一区二区三区| 久久久久久久无码| 欧美激情中文字幕一区二区| 麻豆changesxxx国产| 色综合天天综合网国产成人综合天| 伊人色综合久久久| 精品国产一区二区亚洲人成毛片| 精品欧美不卡一区二区在线观看| 久久午夜a级毛片| 周于希免费高清在线观看| 成人精品在线观看| 亚洲人和日本人hd| 老司机午夜网站| 日韩高清中文字幕一区| 人妻精品久久久久中文字幕69| 2023国产精品| 538精品在线视频| 在线中文字幕不卡| 亚洲精品久久久久久无码色欲四季| 亚洲香蕉成视频在线观看| 日本三级韩国三级欧美三级| 国产区精品视频| 亚洲色图美女| 欧美日韩视频免费| 男人的天堂久久精品| 在线免费观看污视频| 亚洲欧美一区二区三区极速播放| 青青视频在线免费观看| 精品国产91洋老外米糕| 黄色片网站在线| 国产精品高潮呻吟久久av黑人| 白白在线精品| 国产精品久久成人免费观看| 日韩一区精品字幕| 国产亚洲色婷婷久久99精品91| 亚洲免费av高清| 一区二区三区亚洲视频| 亚洲欧美国产高清va在线播| 9765激情中文在线| 亚洲精品免费在线视频| 99久久久久| 五月激情五月婷婷| 国产日产精品一区| 狠狠人妻久久久久久综合| 精品国产免费一区二区三区香蕉| 成人在线观看亚洲| 成人亚洲激情网| 天天精品视频| 一区二区在线免费看| 国产午夜精品久久久久久久 | 久久久精品性| 中文字幕丰满孑伦无码专区| 精品久久久久久电影| 天天干在线观看| 98视频在线噜噜噜国产| 国产三级精品三级在线观看国产| 97碰在线视频| 成人免费毛片片v| 国产精品美女毛片真酒店| 亚洲国产精品va在线观看黑人| av免费在线视| 久久久久国产精品视频| 一区二区三区高清视频在线观看| 精品熟女一区二区三区| 亚洲成人免费av| 亚洲欧美综合一区二区| 欧美在线观看日本一区| 国产亚洲电影| 日本熟妇人妻中出| 国产欧美日韩精品一区| 在线观看毛片视频| 日韩一中文字幕| 精品国产伦一区二区三区观看说明| 免费成人进口网站| 国产精品一区二区在线播放| 久久精品国产亚洲av无码娇色 | 99热这里只有精品8| 最新在线黄色网址| 在线观看成人小视频| 欧美日韩xx| 91久久伊人青青碰碰婷婷| 影音先锋久久资源网| 亚洲精品视频大全| 在线观看欧美精品| h片在线免费| 国产精品日韩一区二区| 香蕉久久国产| 911国产在线| 精品久久一二三区| 在线最新版中文在线| 亚洲免费视频一区| 国产丶欧美丶日本不卡视频| 久久不卡免费视频| 在线日韩精品视频| 美国十次综合久久| 中文字幕乱码人妻综合二区三区| 国产精品麻豆一区二区 | 亚洲人成在线电影| 四虎影视精品永久在线观看| 成年人视频网站免费| 久久一区二区视频| 国产女人18毛片水真多| 97国产精品免费视频| 欧美三级美国一级| japan高清日本乱xxxxx| 色av综合在线| 色呦呦在线看| 日韩高清三级| 国产成人午夜电影网| 91丨九色丨海角社区| 欧美日韩国产成人| 日韩精品四区| 国产精品手机在线观看| 欧美三级午夜理伦三级中视频| 成人性生交大片免费看网站| 伊人久久青草| 国产亚洲综合在线| 成人免费公开视频| 国产在线精品自拍|