国产免费视频,中文字幕精品久久久久人妻,久久精品a一国产成人免费网站,成年性生交大片免费看,国产精品美女久久久久久,久久人人爽人人爽人人片av高清,影音先锋人妻每日资源站,精品人妻无码一区二区三区蜜桃一

最新線程池介紹論文

時間:2021-06-11 19:55:07 論文 我要投稿

2017最新有關線程池介紹論文

  線程池是Mysql5.6的一個核心功能,對于服務器應用而言,無論是web應用服務還是DB服務,高并發請求始終是一個繞不開的話題。當有大量請求并發訪問時,一定伴隨著資源的不斷創建和釋放,導致資源利用率低,降低了服務質量。線程池是一種通用的技術,通過預先創建一定數量的線程,當有請求達到時,線程池分配一個線程提供服務,請求結束后,該線程又去服務其他請求。 通過這種方式,避免了線程和內存對象的頻繁創建和釋放,降低了服務端的并發度,減少了上下文切換和資源的競爭,提高資源利用效率。所有服務的線程池本質都是位了提高資源利用效率,并且實現方式也大體相同。本文主要說明Mysql線程池的實現原理。

2017最新有關線程池介紹論文

  在Mysql5.6出現以前,Mysql處理連接的方式是One-Connection-Per-Thread,即對于每一個數據庫連接,Mysql-Server都會創建一個獨立的線程服務,請求結束后,銷毀線程。再來一個連接請求,則再創建一個連接,結束后再進行銷毀。這種方式在高并發情況下,會導致線程的頻繁創建和釋放。當然,通過thread-cache,我們可以將線程緩存起來,以供下次使用,避免頻繁創建和釋放的問題,但是無法解決高連接數的問題。One-Connection-Per-Thread方式隨著連接數暴增,導致需要創建同樣多的服務線程,高并發線程意味著高的內存消耗,更多的上下文切換(cpu cache命中率降低)以及更多的資源競爭,導致服務出現抖動。相對于One-Thread-Per-Connection方式,一個線程對應一個連接,Thread-Pool實現方式中,線程處理的最小單位是statement(語句),一個線程可以處理多個連接的請求。這樣,在保證充分利用硬件資源情況下(合理設置線程池大小),可以避免瞬間連接數暴增導致的服務器抖動。

  調度方式實現

  Mysql-Server同時支持3種連接管理方式,包括No-Threads,One-Thread-Per-Connection和Pool-Threads。No-Threads表示處理連接使用主線程處理,不額外創建線程,這種方式主要用于調試;One-Thread-Per-Connection是線程池出現以前最常用的方式,為每一個連接創建一個線程服務;Pool-Threads則是本文所討論的線程池方式。Mysql-Server通過一組函數指針來同時支持3種連接管理方式,對于特定的方式,將函數指針設置成特定的回調函數,連接管理方式通過thread_handling參數控制,代碼如下:

  if (thread_handling <= SCHEDULER_ONE_THREAD_PER_CONNECTION) one_thread_per_connection_scheduler(thread_scheduler, &max_connections, &connection_count);else if (thread_handling == SCHEDULER_NO_THREADS) one_thread_scheduler(thread_scheduler);else pool_of_threads_scheduler(thread_scheduler, &max_connections,&connection_count);

  連接管理流程

  通過poll監聽mysql端口的連接請求

  收到連接后,調用accept接口,創建通信socket

  初始化thd實例,vio對象等

  根據thread_handling方式設置,初始化thd實例的scheduler函數指針

  調用scheduler特定的add_connection函數新建連接

  下面代碼展示了scheduler_functions模板和線程池對模板回調函數的實現,這個是多種連接管理的核心。

  struct scheduler_functions { uint max_threads; uint *connection_count; ulong *max_connections; bool (*init)(void); bool (*init_new_connection_thread)(void); void (*add_connection)(THD *thd); void (*thd_wait_begin)(THD *thd, int wait_type); void (*thd_wait_end)(THD *thd); void (*post_kill_notification)(THD *thd); bool (*end_thread)(THD *thd, bool cache_thread); void (*end)(void);};static scheduler_functions tp_scheduler_functions= { 0, // max_threadsNULL,NULL, tp_init, // initNULL, // init_new_connection_threadtp_add_connection, // add_connectiontp_wait_begin, // thd_wait_begin tp_wait_end, // thd_wait_endtp_post_kill_notification, // post_kill_notification NULL, // end_threadtp_end // end };

  線程池的相關參數

  thread_handling:表示線程池模型。 thread_pool_size:表示線程池的group個數,一般設置為當前CPU核心數目。理想情況下,一個group一個活躍的工作線程,達到充分利用CPU的目的。 thread_pool_stall_limit:用于timer線程定期檢查group是否“停滯”,參數表示檢測的間隔。 thread_pool_idle_timeout:當一個worker空閑一段時間后會自動退出,保證線程池中的工作線程在滿足請求的情況下,保持比較低的水平。 thread_pool_oversubscribe:該參數用于控制CPU核心上“超頻”的線程數。這個參數設置值不含listen線程計數。 threadpool_high_prio_mode:表示優先隊列的模式。

  線程池實現

  上面描述了Mysql-Server如何管理連接,這節重點描述線程池的實現框架,以及關鍵接口。如圖1

  每一個綠色的方框代表一個group,group數目由thread_pool_size參數決定。每個group包含一個優先隊列和普通隊列,包含一個listener線程和若干個工作線程,listener線程和worker線程可以動態轉換,worker線程數目由工作負載決定,同時受到thread_pool_oversubscribe設置影響。此外,整個線程池有一個timer線程監控group,防止group“停滯”。

  關鍵接口

  1. tp_add_connection[處理新連接]

  1) 創建一個connection對象

  2) 根據thread_id%group_count確定connection分配到哪個group

  3) 將connection放進對應group的隊列

  4) 如果當前活躍線程數為0,則創建一個工作線程

  2. worker_main[工作線程]

  1) 調用get_event獲取請求

  2) 如果存在請求,則調用handle_event進行處理

  3) 否則,表示隊列中已經沒有請求,退出結束。

  3. get_event[獲取請求]

  1) 獲取一個連接請求

  2) 如果存在,則立即返回,結束

  3) 若此時group內沒有listener,則線程轉換為listener線程,阻塞等待

  4) 若存在listener,則將線程加入等待隊列頭部

  5) 線程休眠指定的時間(thread_pool_idle_timeout)

  6) 如果依然沒有被喚醒,是超時,則線程結束,結束退出

  7) 否則,表示隊列里有連接請求到來,跳轉1

  備注:獲取連接請求前,會判斷當前的活躍線程數是否超過了

  thread_pool_oversubscribe+1,若超過了,則將線程進入休眠狀態。

  4. handle_event[處理請求]

  1) 判斷連接是否進行登錄驗證,若沒有,則進行登錄驗證

  2) 關聯thd實例信息

  3) 獲取網絡數據包,分析請求

  4) 調用do_command函數循環處理請求

  5) 獲取thd實例的套接字句柄,判斷句柄是否在epoll的監聽列表中

  6) 若沒有,調用epoll_ctl進行關聯

  7) 結束

  5.listener[監聽線程]

  1) 調用epoll_wait進行對group關聯的套接字監聽,阻塞等待

  2) 若請求到來,從阻塞中恢復

  3) 根據連接的優先級別,確定是放入普通隊列還是優先隊列

  4) 判斷隊列中任務是否為空

  5) 若隊列為空,則listener轉換為worker線程

  6) 若group內沒有活躍線程,則喚醒一個線程

  備注:這里epoll_wait監聽group內所有連接的套接字,然后將監聽到的連接

  請求push到隊列,worker線程從隊列中獲取任務,然后執行。

  6. timer_thread[監控線程]

  1) 若沒有listener線程,并且最近沒有io_event事件

  2) 則創建一個喚醒或創建一個工作線程

  3) 若group最近一段時間沒有處理請求,并且隊列里面有請求,則

  4) 表示group已經stall,則喚醒或創建線程

  5)檢查是否有連接超時

  備注:timer線程通過調用check_stall判斷group是否處于stall狀態,通過調用timeout_check檢查客戶端連接是否超時。

  7.tp_wait_begin[進入等待狀態流程]

  1) active_thread_count減1,waiting_thread_count加1

  2)設置connection->waiting= true

  3) 若活躍線程數為0,并且任務隊列不為空,或者沒有監聽線程,則

  4) 喚醒或創建一個線程

  8.tp_wait_end[結束等待狀態流程]

  1) 設置connection的waiting狀態為false

  2) active_thread_count加1,waiting_thread_count減1

  備注:

  1)waiting_threads這個list里面的線程是空閑線程,并非等待線程,所謂空閑線程是隨時可以處理任務的線程,而等待線程則是因為等待鎖,或等待io操作等無法處理任務的線程。

  2)tp_wait_begin和tp_wait_end的主要作用是由于匯報狀態,即使更新active_thread_count和waiting_thread_count的信息。

  9. tp_init/tp_end

  分別調用thread_group_init和thread_group_close來初始化和銷毀線程池

  線程池與連接池

  連接池通常實現在Client端,是指應用(客戶端)創建預先創建一定的連接,利用這些連接服務于客戶端所有的DB請求。如果某一個時刻,空閑的連接數小于DB的請求數,則需要將請求排隊,等待空閑連接處理。通過連接池可以復用連接,避免連接的頻繁創建和釋放,從而減少請求的平均響應時間,并且在請求繁忙時,通過請求排隊,可以緩沖應用對DB的沖擊。線程池實現在server端,通過創建一定數量的線程服務DB請求,相對于one-conection-per-thread的一個線程服務一個連接的方式,線程池服務的最小單位是語句,即一個線程可以對應多個活躍的連接。通過線程池,可以將server端的服務線程數控制在一定的范圍,減少了系統資源的競爭和線程上下文切換帶來的消耗,同時也避免出現高連接數導致的高并發問題。連接池和線程池相輔相成,通過連接池可以減少連接的創建和釋放,提高請求的平均響應時間,并能很好地控制一個應用的DB連接數,但無法控制整個應用集群的連接數規模,從而導致高連接數,通過線程池則可以很好地應對高連接數,保證server端能提供穩定的服務。如圖2所示,每個web-server端維護了3個連接的連接池,對于連接池的每個連接實際不是獨占db-server的一個worker,而是可能與其他連接共享。這里假設db-server只有3個group,每個group只有一個worker,每個worker處理了2個連接的請求。

  線程池優化

  1.調度死鎖解決

  引入線程池解決了多線程高并發的問題,但也帶來一個隱患。假設,A,B兩個事務被分配到不同的group中執行,A事務已經開始,并且持有鎖,但由于A所在的group比較繁忙,導致A執行一條語句后,不能立即獲得調度執行;而B事務依賴A事務釋放鎖資源,雖然B事務可以被調度起來,但由于無法獲得鎖資源,導致仍然需要等待,這就是所謂的調度死鎖。由于一個group會同時處理多個連接,但多個連接不是對等的。比如,有的連接是第一次發送請求;而有的連接對應的事務已經開啟,并且持有了部分鎖資源。為了減少鎖資源爭用,后者顯然應該比前者優先處理,以達到盡早釋放鎖資源的`目的。因此在group里面,可以添加一個優先級隊列,將已經持有鎖的連接,或者已經開啟的事務的連接發起的請求放入優先隊列,工作線程首先從優先隊列獲取任務執行。

  2.大查詢處理

  假設一種場景,某個group里面的連接都是大查詢,那么group里面的工作線程數很快就會達到thread_pool_oversubscribe參數設置值,對于后續的連接請求,則會響應不及時(沒有更多的連接來處理),這時候group就發生了stall。通過前面分析知道,timer線程會定期檢查這種情況,并創建一個新的worker線程來處理請求。如果長查詢來源于業務請求,則此時所有group都面臨這種問題,此時主機可能會由于負載過大,導致hang住的情況。這種情況線程池本身無能為力,因為源頭可能是爛SQL并發,或者SQL沒有走對執行計劃導致,通過其他方法,比如SQL高低水位限流或者SQL過濾手段可以應急處理。但是,還有另外一種情況,就是dump任務。很多下游依賴于數據庫的原始數據,通常通過dump命令將數據拉到下游,而這種dump任務通常都是耗時比較長,所以也可以認為是大查詢。如果dump任務集中在一個group內,并導致其他正常業務請求無法立即響應,這個是不能容忍的,因為此時數據庫并沒有壓力,只是因為采用了線程池策略,才導致了請求響應不及時,為了解決這個問題,我們將group中處理dump任務的線程不計入thread_pool_oversubscribe累計值,避免上述問題。

  one-connection-per-thread

  根據scheduler_functions的模板,我們也可以列出one-connection-per-thread方式的幾個關鍵函數。

  static scheduler_functions con_per_functions= { max_connection+1, // max_threads NULL, NULL, NULL, // init Init_new_connection_handler_thread, // init_new_connection_thread create_thread_to_handle_connection, // add_connection NULL, // thd_wait_begin NULL, // thd_wait_end NULL, // post_kill_notification one_thread_per_connection_end, // end_thread NULL // end };

  1.init_new_connection_handler_thread

  這個接口比較簡單,主要是調用pthread_detach,將線程設置為detach狀態,線程結束后自動釋放所有資源。

  2.create_thread_to_handle_connection

  這個接口是處理新連接的接口,對于線程池而言,會從thread_id%group_size對應的group中獲取一個線程來處理,而one-connection-per-thread方式則會判斷是否有thread_cache可以使用,如果沒有則新建線程來處理。具體邏輯如下:

  (1).判斷緩存的線程數是否使用完(比較blocked_pthread_count 和wake_pthread大小)

  (2).若還有緩存線程,將thd加入waiting_thd_list的隊列,喚醒一個等待COND_thread_cache的線程

  (3).若沒有,創建一個新的線程處理,線程的入口函數是do_handle_one_connection

  (4).調用add_global_thread加入thd數組。

  3.do_handle_one_connection

  這個接口被create_thread_to_handle_connection調用,處理請求的主要實現接口。

  (1).循環調用do_command,從socket中讀取網絡包,并且解析執行;

  (2). 當遠程客戶端發送關閉連接COMMAND(比如COM_QUIT,COM_SHUTDOWN)時,退出循環

  (3).調用close_connection關閉連接(thd->disconnect());

  (4).調用one_thread_per_connection_end函數,確認是否可以復用線程

  (5).根據返回結果,確定退出工作線程還是繼續循環執行命令。

  4.one_thread_per_connection_end

  判斷是否可以復用線程(thread_cache)的主要函數,邏輯如下:

  (1).調用remove_global_thread,移除線程對應的thd實例

  (2).調用block_until_new_connection判斷是否可以重用thread

  (3).判斷緩存的線程是否超過閥值,若沒有,則blocked_pthread_count++;

  (4).阻塞等待條件變量COND_thread_cache

  (5).被喚醒后,表示有新的thd需要重用線程,將thd從waiting_thd_list中移除,使用thd初始化線程的thd->thread_stack

  (6).調用add_global_thread加入thd數組。

  (7).如果可以重用,返回false,否則返回ture

  線程池與epoll

  在引入線程池之前,server層只有一個監聽線程,負責監聽mysql端口和本地unixsocket的請求,對于每個新的連接,都會分配一個獨立線程來處理,因此監聽線程的任務比較輕松,mysql通過poll或select方式來實現IO的多路復用。引入線程池后,除了server層的監聽線程,每個group都有一個監聽線程負責監聽group內的所有連接socket的連接請求,工作線程不負責監聽,只處理請求。對于overscribe為1000的線程池設置,每個監聽線程需要監聽1000個socket的請求,監聽線程采用epoll方式來實現監聽。

  Select,poll,epoll都是IO多路復用機制,IO多路復用通過一種機制,可以監聽多個fd(描述符),比如socket,一旦某個fd就緒(讀就緒或寫就緒),能夠通知程序進行相應的讀寫操作。epoll相對于select和poll有了很大的改進,首先epoll通過epoll_ctl函數注冊,注冊時,將所有fd拷貝進內核,只拷貝一次不需要重復拷貝,而每次調用poll或select時,都需要將fd集合從用戶空間拷貝到內核空間(epoll通過epoll_wait進行等待);其次,epoll為每個描述符指定了一個回調函數,當設備就緒時,喚醒等待者,通過回調函數將描述符加入到就緒鏈表,無需像select,poll方式采用輪詢方式;最后select默認只支持1024個fd,epoll則沒有限制,具體數字可以參考cat /proc/sys/fs/file-max的設置。epoll貫穿在線程池使用的過程中,下面我就epoll的創建,使用和銷毀生命周期來描述epoll在線程中是如何使用的。

  線程池初始化,epoll通過epoll_create函數創建epoll文件描述符,實現函數是thread_group_init;

  端口監聽線程監聽到請求后,創建socket,并創建THD和connection對象,放在對應的group隊列中;

  工作線程獲取該connection對象時,若還未登錄,則進行登錄驗證

  若socket還未注冊到epoll,則調用epoll_ctl進行注冊,注冊方式是EPOLL_CTL_ADD,并將connection對象放入epoll_event結構體中

  若是老連接的請求,仍然需要調用epoll_ctl注冊,注冊方式是EPOLL_CTL_MOD

  group內的監聽線程調用epoll_wait來監聽注冊的fd,epoll是一種同步IO方式,所以會進行等待

  請求到來時,獲取epoll_event結構體中的connection,放入到group中的隊列

  線程池銷毀時,調用thread_group_close將epoll關閉。

  備注:

  1.注冊在epoll的fd,若請求就緒,則將對應的event放入到events數組,并將該fd的事務類型清空,因此對于老的連接請求,依然需要調用epoll_ctl(pollfd, EPOLL_CTL_MOD, fd, &ev)來注冊。

  線程池函數調用關系

  (1)創建epoll

  tp_init->thread_group_init->tp_set_threadpool_size->io_poll_create->epoll_create

  (2)關閉epoll

  tp_end->thread_group_close->thread_group_destroy->close(pollfd)

  (3)關聯socket描述符

  handle_event->start_io->io_poll_associate_fd->io_poll_start_read->epoll_ctl

  (4)處理連接請求

  handle_event->threadpool_process_request->do_command->dispatch_command->mysql_parse->mysql_execute_command

  (5)工作線程空閑時

  worker_main->get_event->pthread_cond_timedwait

  等待thread_pool_idle_timeout后,退出。

  (6)監聽epoll

  worker_main->get_event->listener->io_poll_wait->epoll_wait

  (7)端口監聽線程

  main->mysqld_main->handle_connections_sockets->poll

  one-connection-per-thread函數調用關系

  (1) 工作線程等待請求

  handle_one_connection->do_handle_one_connection->do_command->my_net_read->net_read_packet->net_read_packet_header->net_read_raw_loop->vio_read->vio_socket_io_wait->vio_io_wait->poll

  備注:與線程池的工作線程有監聽線程幫助其監聽請求不同,one-connection-per-thread方式的工作線程在空閑時,會調用poll阻塞等待網絡包過來;

  而線程池的工作線程只需要專心處理請求即可,所以使用也更充分。

【最新線程池介紹論文】相關文章:

神仙池景區介紹05-02

甲魚青魚同池養殖技術論文05-25

調蓄池工程的設計研究論文04-12

《太液池歌》詩詞介紹11-14

最新碩士論文開題報告框架介紹06-27

Java線程面試題02-23

多線程人生的雜文隨筆07-04

曾鞏《北池小會》詩文相關介紹11-22

半池童真半池哀傷散文欣賞03-06

亚洲精品久久久久久中文字幂| 日韩人妻系列无码专区| 成人无码男男gv在线观看网站| 久在线中文字幕亚洲日韩| 国产国语熟妇视频在线观看| 精品无码国产不卡在线观看 | 亚洲精品av无码喷奶水糖心| 九色porny丨国产首页注册 | 亚洲国产成人va在线观看| 在线亚洲精品国产二区图片欧美| 不卡一卡二卡三乱码免费网站| 暖暖免费 高清 日本社区在线观看| 亚洲中文字幕在线精品2021| 最新国产精品久久精品 | 在线看无码的免费网站| 亚洲无亚洲人成网站77777| 国产精品久久久久人妻无码| 无码中文字幕av免费放dvd| 久久影院午夜伦手机不四虎卡| 99视频在线精品国自产拍| 性高朝久久久久久久3小时| 国产一区国产二区在线精品| 久久高清超碰av热热久久| 欧美最猛性xxxxx黑人巨茎| 国产亚洲精品成人aa片| 麻豆精品国产熟妇aⅴ一区| 亚洲精品欧美精品日韩精品| 久久精品九九亚洲精品天堂| 国产精品自在在线午夜精华在线 | 大帝av在线一区二区三区| 精品国产国语对白久久免费 | 中文字幕专区高清在线观看| 久久婷婷五月综合色99啪| 亚洲高清无码加勒比| 国产成人精品久久一区二区 | 伊人久久成综合久久影院| 777国产偷窥盗摄精品品在线| 久久综合少妇11p| 无码写真精品永久福利在线| 欧美黄网站色视频免费| 国产亚洲欧美日韩在线观看一区 | 亚洲精品久久久久久成人 | 在线视+欧美+亚洲日本| 成人网站av亚洲国产| 2021年国产精品每日更新| 久久只有这里有精品4| 国产又色又爽无遮挡免费| 国色天香中文字幕在线视频| 亚洲精品无码av人在线观看国产| 被灌满精子的少妇视频| 秋霞午夜成人鲁丝片午夜精品| 在线看片无码永久av| 日本亚洲色大成网站www| 狼色精品人妻在线视频| 亚洲日韩欧美一区、二区| 日本久久夜夜一本婷婷| 自拍亚洲综合在线精品| 精品一区二区三区影院在线午夜| 成人无码精品免费视频在线观看| 亚洲丰满熟女一区二区v| 人妻aⅴ中文字幕| 久热这里只有精品99在线观看| 中文字幕无码久久精品| 国产口爆吞精在线视频2020版| 99国产精品久久99久久久| 免费精品国产人妻国语三上悠亚| 亚洲第一无码精品立川理惠| 97se亚洲国产综合自在线尤物| 97午夜理论片影院在线播放| 2020久久国产综合精品swag| 720lu国产刺激无码| 亚洲最大的熟女水蜜桃av网站| 久久婷婷五月综合色99啪ak| 国产精品69人妻无码久久| 69堂人成无码免费视频果冻传媒| 国产精品亚洲а∨天堂123| 97久久超碰国产精品最新| 久久精品国产99久久久香蕉| 色婷婷亚洲婷婷7月| 日产乱码一二三区别免费麻豆 | 国产精品va尤物在线观看蜜芽| 992tv精品视频tv在线观看| 国产精品无码久久av不卡| 亚洲五月综合缴情在线观看| 天天做天天添av国产亚洲| 69成人免费视频无码专区| 国产交换配乱婬视频| 黑人巨茎精品欧美一区二区| 精品国产色情一区二区三区| 精品免费久久久国产一区| 亚洲日本高清在线aⅴ| 男人到天堂在线a无码| 特级无码毛片免费视频播放▽ | 综合激情久久综合激情| 日韩人妻中文无码一区二区| 欧美成人欧美va天堂在线电影| 亚洲中文在线精品国产| 人妻av中文字幕无码专区| 久久影院综合精品| 99热精这里只有精品| av无码久久久精品免费| 精品国产人妻一区二区三区免费| 国产偷国产偷亚洲清高网站 | 精品麻豆丝袜高跟鞋av| 热思思99re久久精品国产首页| 国产精品久久久久久无码五月| av无码免费岛国动作片不卡| 少妇人妻在线无码天堂视频网| 国产无遮挡又黄又爽不要vip软件| 人人模人人爽人人喊久久| 国产亚洲精品久久久久久无亚洲| 亚洲成国产人片在线观看| 欧美精欧美乱码一二三四区| 精品成人乱色一区二区| 亚洲欧洲无卡二区视頻| 青草伊人久久综在合线亚洲| 日本xxxx片免费观看| 久久人妻av中文字幕| 9久9久女女热精品视频在线观看| 99国产精品无码专区| 天天狠天天添日日拍| 大帝av在线一区二区三区| 成熟老妇女毛茸茸的做性| 波多野结无码高清中文| 亚洲日产av中文字幕无码偷拍| 狠狠躁夜夜躁青青草原软件| 丰满老熟女毛片| 亚洲国产色播av在线| 国产男女免费完整视频| 亚洲欧美日韩中文加勒比| 亚洲国产精品久久久天堂麻豆宅男 | 加勒比色老久久综合网| 乱人伦人妻中文字幕在线入口| 精品亚洲一区二区三区在线播放| 国产精品无码一区二区三区电影 | 99这里只有是精品2| 亚洲国产成人无码av在线影院| 国产精品无码一区二区三区电影 | 亚洲日本成本人观看| 超碰97人人让你爽| 狠狠色丁香婷婷综合尤物| 波多野结av在线无码中文| 无码不卡一区二区三区在线观看| 特级黄www欧美水蜜桃视频| 上海少妇高潮狂叫喷水了| 97久久超碰国产精品最新 | 狠狠色丁香五月综合婷婷| 国产香蕉一区二区三区在线视频 | 动漫精品啪啪一区二区三区| 中文字幕亚洲综合久久综合| 无遮挡十八禁污污网站在线观看| 国产99视频精品免费视频76| 免费无码高潮流白浆视频 | 插b内射18免费视频| 中文字幕 制服 亚洲 另类| 极品无码av国模在线观看| 中文字幕有码无码人妻在线| 亚洲成a人片在线播放| 疯狂添女人下部视频免费| 综合激情丁香久久狠狠| 国产超碰无码最新上传| 午夜人成免费视频| 美女视频黄频a免费| 久久99精品久久久久麻豆| 欧美韩中文精品有码视频在线| 在线亚洲高清揄拍自拍一品区| 国精品人妻无码一区二区三区性色 | 中文无码不卡人妻在线看 | 日韩亚洲中字无码一区二区三区| 狠狠爱天天综合色欲网| 国产精品成人午夜电影| 亚洲日韩成人av无码网站| 中无码人妻丰满熟妇啪啪| 成人影院yy111111在线| 精品成人乱色一区二区| 国产美女视频免费观看的网站| 亚洲综合色在线观看一区二区| 久久久精品妇女99| 狠狠色噜噜狠狠狠狠色综合久av| 国产成人无码久久久精品一| 精品伊人久久久99热这里只| 国产高清一区二区三区直播| 亚洲人成网址在线播放| 人人鲁免费播放视频| 欧美亚洲国产第一精品久久| 久久国产乱子伦精品免费台湾| 欧美成aⅴ人在线视频| 精品综合久久久久久88| 国产亚洲999精品aa片在线爽| 亚洲香蕉中文日韩v日本| 欧美老熟妇乱子伦牲交视频| 亚洲成av人在线观看网址| 丰满少妇大力进入av亚洲| 亚洲自偷自偷在线成人网址| 少妇中文字幕乱码亚洲影视| 97丨九色丨国产人妻熟女| 无码动漫性爽xo视频在线观看| 在线a亚洲v天堂网2019无码| 中文字幕无码av免费久久| 黑人巨茎精品欧美一区二区| 国产偷国产偷亚洲高清人 | 亚洲欲色欲色xxxxx在线| 中文字幕天天躁日日躁狠狠躁| 午夜精品久久久久久久四虎| 亚洲跨种族黑人xxxxx| 国产成人精品高清在线观看99| 色欲久久久中文字幕综合网| 久久久久国色av∨免费看| 亚洲人成小说网站色在线| 日产欧美国产日韩精品| 精品国产经典三级在线看| 亚洲色欲或者高潮影院| 九九国产精品无码免费视频| 中文字幕无码久久精品| 夜夜躁狠狠躁日日躁孕妇| 国产成+人欧美+综合在线观看| 精品无人区乱码1区2区3区在线| 137裸交肉体摄影| 最新国产成人无码久久| 久久大香国产成人av| 久久精品无码人妻无码av| 国产精品自在在线午夜精华在线 | 久久香蕉国产线看观看手机| 人妻被按摩到潮喷中文字幕 | 亚洲欧美日韩成人一区二区三区| 国产精品卡一卡二卡三| 岛国av无码免费无禁网站麦芽| 久久精品无码观看tv| 国产精品女上位好爽在线| 边做饭边被躁bd苍井空图片| 夜色福利站www国产在线视频| 又色又爽又黄高潮的免费视频| 亚洲精品自偷自拍无码| 国产欧美在线手机视频| 成人aⅴ综合视频国产| 在线观看无码av网址| 美女视频黄频a免费| 欧美成人精品三级网站视频| 亚洲精品久久午夜无码一区二区| 精品国际久久久久999波多野| 久久综合色一综合色88| 福利cosplayh裸体の福利| 9久9久女女热精品视频在线观看| 18禁勿入网站入口永久 | 日本一道人妻无码一区在线| 国产av无码一区二区二三区j| 久久99精品久久久久久清纯 | 日本xxxx片免费观看| 亚洲—本道 在线无码| 国产精品自产拍在线观看中文| 囯精品人妻无码一区二区三区99| av制服丝袜白丝国产网站| 韩国亚洲精品a在线无码| 国产欧美日韩国产高清| 日韩精品免费一线在线观看| 日本中文一区二区三区亚洲| 精品无码久久久久久尤物| 亚洲国产精品第一区二区| 日韩中文字幕无码一区二区三区| 国产在线精品一品二区| 2021最新国产在线人成| 亚洲日产av中文字幕无码偷拍 | 国产又色又爽无遮挡免费| 国内成+人 亚洲+欧美+综合在线 | 亚洲国产精品成人精品无码区蜜臀| 国内免费久久久久久久久久| 久久视频这里只精品| 无码欧美黑人xxx一区二区三区| 国产成人av无码精品天堂 | 成年女人爽到高潮喷视频| 日本人成网站18禁止久久影院| 中文无码妇乱子伦视频| 不卡一卡二卡三乱码免费网站 | 亚洲aⅴ天堂av在线电影| 男人吃奶摸下挵进去啪啪软件| 国内精品久久久久久久影院| 四虎影库久免费视频| 天天躁夜夜躁狠狠躁2021a2| 日本一区不卡高清更新二区| 热久久视久久精品2019| 免费无码成人av片在线在线播放 | 日韩亚洲欧美精品综合| 国产又爽又黄又舒服又刺激视频 | 日韩~欧美一中文字幕 | 久久99热这里只有精品国产| 黑人巨大精品欧美视频一区| 中文字幕理伦午夜福利片| 97丨九色丨国产人妻熟女| 色偷偷色噜噜狠狠网站30根| 成人动漫综合网| 日本xxxx片免费观看| 伊伊人成亚洲综合人网香| 在线播放国产精品三级网| 一区二区人妻无码欧美| 无码高潮爽到爆的喷水视频| 久久99精品久久久久麻豆| 久久综合色一综合色88| 国产精品女上位好爽在线| 国产亚洲精品线视频在线| 亚洲大乳高潮日本专区| 秋霞午夜成人鲁丝片午夜精品| 在线岛国片免费无码av| 精久国产一区二区三区四区| 乱码视频午夜在线观看| 亚洲免费最大黄页网站| 国产精品无码a∨精品影院app| 无码少妇一区二区浪潮av| 国产激情无码视频在线播放| 国产欧美成aⅴ人高清| 男人边吃奶边做好爽免费视频| 免费国产午夜高清在线视频| 亚洲综合国产在不卡在线| 国产熟睡乱子伦视频| 狠狠狠狼鲁亚洲综合网| 亚洲理论在线a中文字幕| 日本做受高潮好舒服视频| 无码精品国产va在线观看dvd| 国产在线亚州精品内射| 久久久久国色av∨免费看| 丝袜a∨在线一区二区三区不卡 | 成人午夜免费无码福利片| 国产亚洲精aa在线观看不卡| 国产精品卡一卡二卡三| 久久精品人人槡人妻人人玩av | 天天天天躁天天爱天天碰| 无码动漫性爽xo视频在线观看| 国产真实露脸乱子伦| 成人性欧美丨区二区三区| 自怕偷自怕亚洲精品| 狠狠色丁香婷婷综合久久来来去 | 亚洲精品一区二区三区精品| 老色鬼永久精品网站| 国产无遮挡18禁无码网站| 欧美激情性xxxxx高清真| 99国产亚洲精品美女久久久久| 亚洲一区二区三区自拍天堂| 国产老师开裆丝袜喷水视频| 狠狠色丁香婷婷综合久久小说| 精品无码久久久久久尤物| 久久九九有精品国产| 69天堂人成无码免费视频| 国产成人av性色在线影院色戒| 日日碰日日摸日日澡视频播放| 337p日本欧洲亚洲大胆精品555588| 精品av天堂毛片久久久| 巨爆乳无码视频在线观看| 精品少妇无码一区二区三批| 亚洲中文字幕乱码电影| 日本人成网站18禁止久久影院 | 无码av在线一本无码| 自慰系列无码专区| 久久人人爽人人爽人人片dvd| 国产亚洲精品久久yy5099| 无遮挡粉嫩小泬久久久久久久| 国产无遮挡无码很黄很污很刺激| 亚洲国产码专区| 妇乱子伦精品小说网| 亚洲国产欧美一区点击进入| 日韩视频无码免费一区=区三区| 欧美巨大黑人精品videos| 亚洲国产综合精品2020| 亚洲色欲或者高潮影院| 日韩亚洲国产激情一区浪潮av| 精品成人免费一区二区不卡| 亚洲精品综合网在线8050影院| 综合欧美亚洲日本一区| 久久天天躁狠狠躁夜夜不卡| 国产综合久久亚洲综合| 色欲视频综合免费天天| 国产香蕉97碰碰视频va碰碰看| 131美女mm爱做爽爽爽视频| 国产成人92精品午夜福利| 成人aⅴ综合视频国产| 国产av亚洲第一女人av| 无码三级中文字幕在线观看| 亚洲精品无码久久不卡| 国产 校园 另类 小说区| 久久精品人人做人人爱爱漫画| 精品9e精品视频在线观看| 无码人妻精品一区二区三区久久 | 亚洲成亚洲成网| 精品亚洲国产成人av在线时间短的| 国产在线一区二区在线视频| 亚洲成年轻人电影网站www| 人人爽人妻精品a片二区| 偷偷要色偷偷中文无码| 有码中文av无码中文av| 人妻中文字幕av无码专区| 无码av不卡免费播放| 欧美牲交黑粗硬大| 欧美黄网站色视频免费| 午夜爽爽爽男女免费观看hd| 无码国产偷倩在线播放老年人| 综合图片亚洲综合网站| 国产美女露脸口爆吞精| 亚洲国产一区二区三区在观看 | 女人天堂一区二区三区| 亚洲精品自偷自拍无码 | 国产高清av久久久久久久| 无码精油按摩潮喷在播放| 中文字幕久久久人妻无码| 日韩亚洲精品国产第二页| 大伊香蕉精品视频在线直播| 亚洲sm另类一区二区三区| 国产精品高清一区二区不卡| 狠狠色丁香五月综合婷婷| 一本一道av无码中文字幕麻豆| 天天做天天爱夜夜爽毛片l | 国产剧情福利av一区二区| 人人妻碰人人免费| 在线精品国产大象香蕉网| 亚洲国产精品综合久久20| 国产精品丝袜肉丝出水| 国产免费午夜福利在线播放11 | 99蜜桃臀久久久欧美精品| 国产制服丝袜亚洲高清| 国产日产欧产精品精品app| 精品香蕉在线观看视频| 国精产品一品二品国精在线观看| 久久国产福利国产秒拍飘飘网 | 无码中文字幕va精品影院| 中文人妻无码一区二区三区在线| 第一亚洲中文久久精品无码| 国产精品亚洲mnbav网站| 久久人人做人人妻人人玩精品va | 专干老熟女视频在线观看| 国产精品久久久久人妻无码| 亚洲第一页综合图片自拍| 午夜精品久久久久9999高清 | 国产大量精品视频网站| 日韩av无码成人无码免费| 亚洲精品无码久久久久av老牛| 无码囯产精品一区二区免费| 在线看无码的免费网站| 无码免费午夜福利片在线| 女人夜夜春精品a片| 久久精品国产久精国产69| 人人妻久久人人澡人人爽人人精品| 日韩人妻ol丝袜av一二区| 久久精品人人做人人爱爱漫画| 亚洲色婷六月丁香在线视频| 久久99精品久久久久久清纯| 亚洲女初尝黑人巨| 亚洲色大成网站在线| 国产精品无码制服丝袜网站 | 亚洲色欲色欲高清无码| av网站免费线看精品| 无码中文资源在线播放| 人妻加勒比系列无码专区| 人妻夜夜爽天天爽一区| 国产福利无码一区在线| 亚洲成a人片在线观看无码专区| 成人区亚洲区无码区在线点播| 国产太嫩了在线观看| 亚洲色爱免费观看视频| 亚洲国产成人手机在线电影| 成a∧人片在线观看无码| 亚洲婷婷综合色香五月| 69成人免费视频无码专区| 中文无码不卡人妻在线看 | 性高朝久久久久久久久久| 亚洲免费最大黄页网站| 欧美日韩亚洲国产欧美电影| 国产精品丝袜肉丝出水| 又色又爽又黄的视频网站| 国产成人无码18禁午夜福利网址 | 国产麻豆精品传媒av国产| 亚洲日本乱码中文在线电影| 免费观看又色又爽又湿的视频 | 亚洲综合在线视频自拍| 国产精品无码av片在线观看播放| 99精品日本二区留学生| 中文字幕免费无码专区剧情| 色婷婷亚洲十月十月色天| 国产麻豆精品福利在线观看| 色综合天天综合高清网国产在线| 免费久久99精品国产自在现线| 日韩人妻无码一区2区3区里沙| 亚洲精品一区二区丝袜图片| 国产成人青青久久大片| 国产在线观看www污污污| 亚洲国产av美女网站| 老司机免费的精品视频| 国内精品久久久久久久999| 狼人视频国产在线视频www色| 曰韩精品无码一区二区三区视频| 麻豆aⅴ精品无码一区二区| 国产亚洲精品久久久久久无亚洲| 亚洲图片小说激情综合| 99国产精品欧美一区二区三区| 亚洲国产成人精品无码区宅男| 国产亚洲熟妇综合视频|