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

對(duì)象池的使用場景以及自動(dòng)回收技術(shù)

開發(fā) 后端
在編程中,我們經(jīng)常會(huì)涉及到對(duì)象的操作,而經(jīng)常的操作模式如下圖所示:創(chuàng)建對(duì)象->使用對(duì)象->銷毀對(duì)象。

[[420171]]

 對(duì)象池

在編程中,我們經(jīng)常會(huì)涉及到對(duì)象的操作,而經(jīng)常的操作模式如下圖所示:創(chuàng)建對(duì)象->使用對(duì)象->銷毀對(duì)象。

而這個(gè)對(duì)象有可能創(chuàng)建的時(shí)候會(huì)需要構(gòu)建很多資源,消耗比較大, 比如:在hiredis的SDK中每次都創(chuàng)建一個(gè)redisContext,如果需要查詢,那就首先要進(jìn)行網(wǎng)絡(luò)連接。如果一直都是上圖的工作方式,那將會(huì)頻繁的創(chuàng)建連接,查詢完畢后再釋放連接。重新建立連接,讓網(wǎng)絡(luò)的查詢效率降低。

這個(gè)時(shí)候就可以構(gòu)建一個(gè)對(duì)象池來重復(fù)利用這個(gè)對(duì)象,并且一般要做到線程安全:

  1. 從對(duì)象池中獲取對(duì)象,如果沒有對(duì)象,則創(chuàng)建一個(gè),并返回
  2. 使用對(duì)象
  3. 使用完成對(duì)象后,將對(duì)象還回對(duì)象池

那么符合如下條件的,應(yīng)該適合使用對(duì)象池技術(shù):

  • 有一些對(duì)象雖然創(chuàng)建開銷比較大,但是不一定能夠重復(fù)使用。要使用對(duì)象池一定要確保對(duì)象能夠重復(fù)使用。
  • 這個(gè)對(duì)象構(gòu)建的時(shí)候,有一些耗時(shí)的資源可以重復(fù)利用。比如redisContext的網(wǎng)絡(luò)連接。又或者如果對(duì)象的頻繁申請(qǐng)釋放會(huì)帶來一些其他的資源使用問題,比如內(nèi)存碎片。重復(fù)利用能夠提升程序的效率。
  • 對(duì)象池的數(shù)量應(yīng)該控制在能夠接受的范圍內(nèi),并不會(huì)無限膨脹。

對(duì)象池的實(shí)現(xiàn)

首先介紹一下程序的樣例對(duì)象Object, 其就接受一個(gè)初始化參數(shù)strInit。

  1. class Object 
  2. public
  3.   Object(std::string strInit) : m_strInit(strInit)  
  4.   {  
  5.     std::cout << "Object()" << std::endl;  
  6.   } 
  7.   virtual ~Object()  
  8.   {  
  9.     std::cout << "~Object()" << std::endl; 
  10.   } 
  11. private: 
  12.   std::string m_strInit; 
  13. }; 

先來看看對(duì)象池的類圖:

  • ObjectPool中采用std::list作為對(duì)象池的數(shù)據(jù)結(jié)構(gòu),存儲(chǔ)的對(duì)象采用shared_ptr包裹。
  • GetObject獲取一個(gè)對(duì)象,傳入的參數(shù)為Object需要初始化的信息,如果池子里面沒有,就創(chuàng)建一個(gè)返回,如果有就從池子中取出一個(gè)返回。
  • ReturnObject 當(dāng)應(yīng)用程序使用完畢后,調(diào)用這個(gè)方法還回對(duì)象到對(duì)象池

然后再來看看代碼吧:

  1. class ObjectPool 
  2. public
  3.   ObjectPool() { ; } 
  4.   ~ObjectPool() { ; } 
  5.   std::shared_ptr<Object> GetObject(std::string strInit) 
  6.   { 
  7.     std::shared_ptr<Object> pObject; 
  8.     { 
  9.       std::lock_guard<std::mutex> guard(m_mutex); 
  10.       if (!m_lObjects.empty()) 
  11.       { 
  12.         pObject = m_lObjects.front(); 
  13.         m_lObjects.pop_front(); 
  14.       } 
  15.     } 
  16.  
  17.     if (!pObject) 
  18.     { 
  19.       pObject = std::make_shared<Object>(strInit); 
  20.     } 
  21.     return pObject; 
  22.   } 
  23.  
  24.   void ReturnObject(std::shared_ptr<Object> pObject) 
  25.     if (!pObject) 
  26.       return
  27.  
  28.     std::lock_guard<std::mutex> guard(m_mutex); 
  29.     m_lObjects.push_front(pObject); 
  30.   } 
  31.  
  32. private: 
  33.   std::mutex m_mutex; 
  34.   std::list<std::shared_ptr<Object>> m_lObjects; 
  35. }; 

那么使用起來比較簡單,如下所示。

  1. ObjectPool objPool; 
  2.   auto pObj1 = objPool.GetObject("abc"); 
  3.   //操作對(duì)象完成任務(wù) 
  4.   //...... 
  5.   objPool.ReturnObject(pObj1); 

但是要注意一點(diǎn),有時(shí)候可能使用完了,卻忘記調(diào)用ReturnObject了,這個(gè)時(shí)候是否想起了RAII技術(shù)《C++ RAII實(shí)現(xiàn)golang的defer》和《從lock_guard來說一說C++常用的RAII》。

那么問一問,可以實(shí)現(xiàn)一個(gè)自動(dòng)回收的對(duì)象池嗎?不需要調(diào)用者在對(duì)象使用完成后,手動(dòng)將對(duì)象歸還給對(duì)象池,并且你可能要問:

  1. 針對(duì)不同類型的Object,是不是可以用模板去實(shí)現(xiàn)更加通用的實(shí)現(xiàn)一個(gè)對(duì)象池
  2. 構(gòu)造函數(shù)的參數(shù)列表,也可以是任意的形式

自動(dòng)回收的對(duì)象池

要實(shí)現(xiàn)自動(dòng)回收的對(duì)象池,首先要了解unique_ptr和shared_ptr都可以自定義刪除器,也就是說,比如當(dāng)從對(duì)象池獲取到的對(duì)象是用智能指針包裹的,一般默認(rèn)的刪除器為delete,那我們可以自義定刪除器為: 將這個(gè)對(duì)象重新放回到對(duì)象池. 代碼如下:

  1. template<typename T> 
  2. class ObjectPool 
  3. public
  4.   ObjectPool() 
  5.   { 
  6.     m_fObjDeleter = [&](T* pObj) { 
  7.       if (m_bDeconstruct) 
  8.         delete pObj; 
  9.       else 
  10.       { 
  11.         std::lock_guard<std::mutex> guard(m_mutex); 
  12.         m_lObjects.push_front(std::shared_ptr<T>(pObj, m_fObjDeleter)); 
  13.       } 
  14.     }; 
  15.   } 
  16.  
  17.   ~ObjectPool() 
  18.   { 
  19.     m_bDeconstruct = true
  20.   } 
  21.  
  22.   template<typename... Args> 
  23.   std::shared_ptr<T> GetObject(Args&&... args) 
  24.   { 
  25.     std::shared_ptr<T> pObject; 
  26.     { 
  27.       std::lock_guard<std::mutex> guard(m_mutex); 
  28.       if (!m_lObjects.empty()) 
  29.       { 
  30.         pObject = m_lObjects.front(); 
  31.         m_lObjects.pop_front(); 
  32.       } 
  33.     } 
  34.  
  35.     if (!pObject) 
  36.     { 
  37.       pObject.reset(new T(std::forward<Args>(args)...), m_fObjDeleter); 
  38.     } 
  39.     return pObject; 
  40.   } 
  41.  
  42.   void ReturnObject(std::shared_ptr<T> pObject) 
  43.     if (!pObject) 
  44.       return
  45.  
  46.     std::lock_guard<std::mutex> guard(m_mutex); 
  47.     m_lObjects.push_front(pObject); 
  48.   } 
  49.  
  50. private: 
  51.   std::function<void(T* pObj)> m_fObjDeleter; 
  52.   std::mutex m_mutex; 
  53.   std::list<std::shared_ptr<T>> m_lObjects; 
  54.   volatile bool m_bDeconstruct = false
  55. }; 

自動(dòng)回收

關(guān)于自動(dòng)回收,這個(gè)涉及到一個(gè)問題,是用unique_ptr還是shared_ptr呢,在這篇大牛寫的文章中進(jìn)行了比較詳細(xì)的闡述《thinking in object pool》(鏈接見參考部分), 說明了應(yīng)該使用unique_ptr,也看到不少人在網(wǎng)上轉(zhuǎn)發(fā)。主要如下闡述:

因?yàn)槲覀冃枰阎悄苤羔樀哪J(rèn)刪除器改為自定義刪除器,用shared_ptr會(huì)很不方便,因?yàn)槟銦o法直接將shared_ptr的刪除器修改為自定義刪除器,雖然你可以通過重新創(chuàng)建一個(gè)新對(duì)象,把原對(duì)象拷貝過來的做法來實(shí)現(xiàn),但是這樣做效率比較低。而unique_ptr由于是獨(dú)占語義,提供了一種簡便的方法方法可以實(shí)現(xiàn)修改刪除器,所以用unique_ptr是最適合的。

這種方式需要每次都創(chuàng)建一個(gè)新對(duì)象,并且拷貝原來的對(duì)象,是一種比較低效的做法。

但本人自己進(jìn)行了思考,認(rèn)為可以做到使用shared_ptr一樣實(shí)現(xiàn)了高效的自動(dòng)回收機(jī)制。首先定義了一個(gè)m_fObjDeleter自定義deleter, 不過這種做法可能比較難理解一些,就是定義的m_fObjDeleter函數(shù)內(nèi)也會(huì)調(diào)用m_fObjDeleter。當(dāng)shared_ptr引用計(jì)數(shù)為0的時(shí)候,會(huì)做如下事情:

  • 如果發(fā)現(xiàn)是OjbectPool調(diào)用了析構(gòu)函數(shù),則直接釋放對(duì)象
  • 如果發(fā)現(xiàn)OjbectPool并沒有調(diào)用析構(gòu)函數(shù),則將對(duì)象放入對(duì)象池中
  1. m_fObjDeleter = [&](T* pObj) { 
  2.   if (m_bDeconstruct) 
  3.     delete pObj; 
  4.   else 
  5.   { 
  6.     std::lock_guard<std::mutex> guard(m_mutex); 
  7.     m_lObjects.push_front(std::shared_ptr<T>(pObj, m_fObjDeleter)); 
  8.   } 
  9. }; 

當(dāng)創(chuàng)建對(duì)象的時(shí)候指定自定義的deleter:

  1. pObject.reset(new T(std::forward<Args>(args)...), m_fObjDeleter); 

模板支持

使用了模板可以支持通用的對(duì)象:

  1. template<typename T> 
  2. class ObjectPool 
  3. public
  4.     //...... 
  5.     template<typename... Args> 
  6.     std::shared_ptr<T> GetObject(Args&&... args) 
  7.     { 
  8.         //...... 
  9.     } 
  10.  
  11.     void ReturnObject(std::shared_ptr<T> pObject) 
  12.     { 
  13.         //...... 
  14.     } 
  15.  
  16. private: 
  17.     std::function<void(T* pObj)> m_fObjDeleter; 
  18.     //..... 
  19.     std::list<std::shared_ptr<T>> m_lObjects; 
  20.     //....... 
  21. }; 

可變函數(shù)參數(shù)完美轉(zhuǎn)發(fā)

不同的對(duì)象,可能使用的構(gòu)造函數(shù)參數(shù)也不同,那么當(dāng)調(diào)用GetObject的時(shí)候的參數(shù)要設(shè)置為可變參數(shù),其實(shí)現(xiàn)如下:

  1. template<typename... Args> 
  2. std::shared_ptr<T> GetObject(Args&&... args) 
  3.   std::shared_ptr<T> pObject; 
  4.   { 
  5.     std::lock_guard<std::mutex> guard(m_mutex); 
  6.     if (!m_lObjects.empty()) 
  7.     { 
  8.       pObject = m_lObjects.front(); 
  9.       m_lObjects.pop_front(); 
  10.     } 
  11.   } 
  12.  
  13.   if (!pObject) 
  14.   { 
  15.     pObject.reset(new T(std::forward<Args>(args)...), m_fObjDeleter); 
  16.   } 
  17.   return pObject; 

其他

以上對(duì)對(duì)象池的基本內(nèi)容進(jìn)行了闡述,那么對(duì)于對(duì)象池的實(shí)現(xiàn)要根據(jù)場景還有若干的細(xì)節(jié),有些還比較重要:

  • 是否要在啟動(dòng)的時(shí)候初始化指定數(shù)量的對(duì)象?
  • 對(duì)象池的數(shù)量是否要設(shè)置一個(gè)上限或者下線
  • 對(duì)象池重復(fù)利用,當(dāng)取出來后要注意,是不是要對(duì)對(duì)象做一次reset之類的操作,防止對(duì)象上一次的調(diào)用殘留數(shù)據(jù)對(duì)本地調(diào)用構(gòu)成影響,這個(gè)要根據(jù)自己對(duì)象的特點(diǎn)去進(jìn)行相應(yīng)的reset操作
  • 有時(shí)候當(dāng)這個(gè)對(duì)象可能出現(xiàn)了特別的情況需要銷毀,是否也需要考慮到?
  • 等等

參考

  • <<C++ Primer>>模板部分
  • << thinking in object pool >>: https://www.cnblogs.com/qicosmos/p/4995248.html

 

 

責(zé)任編輯:武曉燕 來源: 一個(gè)程序員的修煉之路
相關(guān)推薦

2015-11-30 11:14:59

C++對(duì)象池自動(dòng)回收

2020-04-07 14:20:10

RabbitMMySQL數(shù)據(jù)庫

2021-06-06 23:40:53

線程池使用場景

2024-11-27 08:15:50

2022-10-28 07:15:26

策略模式使用場景UML

2024-01-30 09:43:43

Java緩存技術(shù)

2023-05-16 07:47:18

RabbitMQ消息隊(duì)列系統(tǒng)

2020-10-29 07:16:26

布隆過濾器場景

2018-08-15 09:48:27

數(shù)據(jù)庫Redis應(yīng)用場景

2019-10-25 10:35:49

Java用法場景

2023-06-06 08:18:24

Kafka架構(gòu)應(yīng)用場景

2021-08-06 10:43:56

Kubernetes容器

2020-06-16 15:40:32

閉鎖柵欄線程

2015-06-26 11:33:23

Python裝飾器使用場景實(shí)踐

2025-09-17 18:49:55

2019-04-10 15:43:12

SDN場景網(wǎng)絡(luò)架構(gòu)

2013-12-25 16:03:39

GitGit 命令

2021-08-23 12:00:41

云計(jì)算

2025-04-02 00:35:00

CMS垃圾回收器

2024-12-31 07:56:33

Disruptor內(nèi)存有界隊(duì)列消費(fèi)模式
點(diǎn)贊
收藏

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

成人美女av在线直播| 在线观看日韩www视频免费| 国产一区 在线播放| 手机看片一区二区| 日本中文一区二区三区| 欧美成人午夜影院| jizz日本免费| 国产一区二区三区精品在线观看| 亚洲午夜国产一区99re久久| 欧洲成人一区二区| www.亚洲欧美| 日韩高清在线一区| 国模极品一区二区三区| 国产午夜精品久久久久久久久| 欧美成人精品午夜一区二区| 日韩欧美亚洲国产一区| 国产一二三四区在线观看| 免费黄色在线视频网站| 国产aⅴ综合色| 国产精品久久久久久久久粉嫩av| 国产污视频在线看| 久久精品久久久| 亚洲人午夜色婷婷| 国产免费一区二区三区最新6| 2019年精品视频自拍| 亚洲一区二区中文在线| 亚洲欧美精品| 欧美孕妇孕交xxⅹ孕妇交| 成人综合在线网站| 国产主播欧美精品| 51国产偷自视频区视频| 精品动漫一区| 欧美精品在线看| 91大神福利视频| 国产亚洲欧美日韩在线观看一区二区 | 日韩电影在线播放| 日本在线视频1区| gogogo免费视频观看亚洲一| 亚洲精品女av网站| 国产理论视频在线观看| 蜜桃精品视频在线| 国产精品美腿一区在线看| 国产成人一区二区三区影院在线| 欧美视频四区| 欧美大秀在线观看| 欧美卡一卡二卡三| 图片区亚洲欧美小说区| 中文字幕在线亚洲| 黄色av片三级三级三级免费看| 国产一区二区三区电影在线观看| 亚洲美女久久久| 国产精品无码一区二区三区免费| 久久夜色精品国产噜噜av小说| 日韩三级免费观看| 久久国产免费视频| 2020最新国产精品| 精品1区2区在线观看| 中文字幕人妻一区| 精品人人人人| 亚洲国产精品字幕| 亚洲区免费视频| 精品香蕉视频| 精品国产一区二区三区四区在线观看| 精品在线观看一区| 最新欧美人z0oozo0| 欧美日韩国产999| 国产五月天婷婷| 99亚洲精品| 国产精品第三页| 亚洲一区精品在线观看| 国产精品123区| 国产日韩二区| 欧美香蕉爽爽人人爽| 久久嫩草精品久久久精品| 欧洲av一区| 黄色片网站在线| 亚洲香肠在线观看| 国产精品无码一区二区在线| 欧美大片高清| 91精品免费在线| 亚洲视频在线播放免费| 国产精品亚洲片在线播放| www.亚洲男人天堂| 久久久久久久久久综合| 久久黄色网页| 91黄在线观看| 色播色播色播色播色播在线| 国产东北露脸精品视频| 国产精品高清一区二区三区| 免费a在线观看| 国产精品三级在线观看| 精品91一区二区三区| 在线网址91| 婷婷激情综合网| 精品一卡二卡三卡| 欧美国产日韩电影| 精品视频资源站| 动漫美女无遮挡免费| 综合伊思人在钱三区| 在线看片第一页欧美| 丰满少妇被猛烈进入一区二区| 欧美黄色一区| 欧美中文在线观看| 一区二区视频免费| 高清不卡在线观看| 亚洲永久激情精品| av中文在线资源库| 欧美日韩免费一区二区三区视频| 7m第一福利500精品视频| 国产成人愉拍精品久久| 日本女优在线视频一区二区| 91免费看片网站| 亚洲日本在线播放| 久久久久久电影| 欧美美女黄色网| 日韩电影毛片| 欧美精品xxxxbbbb| 人妻丰满熟妇aⅴ无码| 五月婷婷六月综合| 777午夜精品福利在线观看| 一级黄色片在线| 99久久精品国产精品久久| 色爱区成人综合网| 日本中文字幕中出在线| 欧美日韩一本到| 岛国精品资源网站| 欧美www视频在线观看| 91精品国产高清久久久久久久久| 97caocao| 国产日韩精品久久久| 波多野结衣av一区二区全免费观看| 性高爱久久久久久久久| 欧美精品一区二区不卡 | 日韩精品免费视频一区二区三区| 日韩精品在线免费播放| 日本在线一级片| 男女激情视频一区| 麻豆91蜜桃| www.超碰在线| 91精品国产综合久久久久久| 一区二区三区在线观看免费视频| 亚洲国产91| 91在线精品播放| 91短视频版在线观看www免费| 黄色成人av网| 任你躁av一区二区三区| 91日韩欧美| 成人黄色av网站| 91精彩视频在线播放| 色综合天天综合网天天狠天天| 中文视频在线观看| 欧美日韩久久| 91嫩草免费看| 亚洲欧美视频一区二区| 欧美三日本三级三级在线播放| 中文字幕第4页| 性感少妇一区| 久久99精品国产一区二区三区| 欧美黄色视屏| 日韩欧美激情一区| 天天干中文字幕| 国产成人日日夜夜| 中文字幕の友人北条麻妃| 不卡一区视频| 久久久久www| 国产精品欧美综合亚洲| 中文字幕亚洲视频| 国产精品中文久久久久久| 女同性一区二区三区人了人一| 91精品久久久久久久久久久| 麻豆影视国产在线观看| 欧美疯狂做受xxxx富婆| 国产精品国产三级国产传播| 国内精品伊人久久久久av一坑| 国产1区2区3区中文字幕| 视频欧美一区| 久久精品国产视频| 国产乱人乱偷精品视频| 亚洲女人的天堂| 国产成人av片| 99伊人成综合| 日本一区视频在线观看| 粉嫩91精品久久久久久久99蜜桃| 最近2019中文字幕mv免费看| 国产又粗又猛又黄| 亚洲夂夂婷婷色拍ww47| 男女性杂交内射妇女bbwxz| 中文一区在线| 欧美一区二区在线| 一本一道久久a久久| 午夜精品久久久久久久99热| 四虎在线免费看| 色综合久久88色综合天天免费| 国产在线免费看| 国产精品一级黄| 成人午夜精品久久久久久久蜜臀| 亚洲精品动态| 国产精品嫩草影院一区二区| 精品孕妇一区二区三区| 日韩免费成人网| 国产精品久久久久久久久久久久久久久久久| 久久九九全国免费| 一级黄色片国产| 国产亚洲激情| 一区二区三区国产福利| 三级精品视频| 国产日韩欧美日韩| 麻豆视频在线观看免费网站黄| 亚洲视频在线观看免费| www.色视频| 色妞www精品视频| 99久在线精品99re8热| 挪威xxxx性hd极品| 奇米影视一区二区三区小说| 99久久久精品视频| 成人羞羞在线观看网站| 肥熟一91porny丨九色丨| 亚洲欧美一级| 热99在线视频| 91白丝在线| 最近的2019中文字幕免费一页| 人妻va精品va欧美va| 欧美日韩精品欧美日韩精品一| 国产成人愉拍精品久久| 亚洲伦在线观看| 老熟妇一区二区| 粉嫩嫩av羞羞动漫久久久| 怡红院亚洲色图| 久久久久一区| 加勒比成人在线| 99久久综合狠狠综合久久aⅴ| 精品国产乱码久久久久久久软件 | 婷婷成人激情在线网| 波多野结衣久久久久| 久久久久久久久99精品| 久久久无码人妻精品一区| 国产98色在线|日韩| 天天干天天玩天天操| 老**午夜毛片一区二区三区 | 亚洲精品视频啊美女在线直播| 精品无码av无码免费专区| 日韩三级在线| 日韩精品一区二区三区四区五区| 精品欧美午夜寂寞影院| www.成人av| 香蕉成人在线| 成人羞羞国产免费| 国产日本久久| 国产精品视频在线播放| 456亚洲精品成人影院| 91a在线视频| 不卡av免费观看| 欧美黄色小视频| 欧美hdxxxxx| 久久精品视频在线| 日本高清中文字幕在线| 色综合影院在线| 黄色av电影在线观看| 中文字幕国产日韩| 久做在线视频免费观看| 久久精品国产欧美亚洲人人爽| 国产黄网站在线观看| 久久激情视频免费观看| 黄色av电影在线观看| 北条麻妃在线一区二区| 毛片在线网址| 高清在线视频日韩欧美| 国产白浆在线免费观看| 97热在线精品视频在线观看| 18av在线视频| 7m第一福利500精品视频| 国产精品迅雷| 国产精品户外野外| 日韩专区视频网站| 亚洲一区二区三区香蕉| 久久九九热re6这里有精品| 国产一区二区在线网站| 丝袜美腿综合| 日韩欧美第二区在线观看| 久久影视一区| 日韩国产一级片| 香蕉国产精品偷在线观看不卡| 欧美三级午夜理伦三级| 奇米精品一区二区三区四区| 性生生活大片免费看视频| 不卡免费追剧大全电视剧网站| 在线免费观看a级片| 久久久99精品免费观看不卡| 日本视频在线免费| 一区二区三区在线高清| 999视频在线| 91精品黄色片免费大全| 后入内射欧美99二区视频| 日韩国产一区三区| 秋霞午夜在线观看| 奇米一区二区三区四区久久| 国产精品.xx视频.xxtv| 999热视频| 国产不卡一区| 在线一区高清| 视频一区欧美日韩| 三级黄色片免费看| 99re热视频精品| 欧洲美女女同性互添| 色综合天天狠狠| 国产夫妻自拍av| 亚洲欧美日韩国产精品| 国产激情在线视频| 51精品在线观看| 日韩一二三区在线观看| 免费中文日韩| 亚洲人成免费网站| 国产aaa一级片| 丁香桃色午夜亚洲一区二区三区| 2019男人天堂| 亚洲一区二区视频在线| 自拍偷拍色综合| 日韩欧美亚洲一区二区| 精精国产xxxx视频在线| 欧洲成人在线视频| 精品国产伦一区二区三区观看说明| 久久精品99| 亚洲一区在线| 色天使在线观看| 久久综合色天天久久综合图片| 免费中文字幕日韩| 欧美综合在线视频| 你懂的免费在线观看| 欧美激情欧美激情| 懂色av色香蕉一区二区蜜桃| 欧美精品一区二区视频| 综合久久亚洲| 久久人人爽av| 国产欧美视频在线观看| 福利一区二区三区四区| 欧美另类一区二区三区| shkd中文字幕久久在线观看| 26uuu另类亚洲欧美日本一| 亚洲日本视频在线| 黄黄视频在线观看| 国产精品一区二区果冻传媒| av片在线免费看| 色偷偷久久一区二区三区| 日韩一级免费毛片| 欧美激情亚洲综合一区| 亚洲国产精品免费视频| 国产美女视频免费| 久久福利资源站| 精品人妻伦九区久久aaa片| 欧美熟乱第一页| 成人在线二区| 日韩免费精品视频| av综合网站| 99色这里只有精品| 成人av网址在线观看| 青娱乐免费在线视频| 欧美美女视频在线观看| 一二三四区在线观看| 91视频婷婷| 午夜精品av| 男人操女人下面视频| 性欧美疯狂xxxxbbbb| 欧洲精品久久一区二区| 欧美第一淫aaasss性| 亚洲日本视频在线| 日本在线观看a| 国产女人18毛片水真多成人如厕| 无码人妻久久一区二区三区| 中国china体内裑精亚洲片| 性感女国产在线| 欧美一区二区综合| 久久er99热精品一区二区| 国产男女猛烈无遮挡在线喷水| 欧美日韩高清影院| av在线free| 美脚丝袜一区二区三区在线观看| 欧美中文字幕| 国产精品www爽爽爽| 欧美日韩卡一卡二| 中文字幕在线播放网址| 国产欧美韩日| 看片的网站亚洲| 久草成人在线视频| 亚洲精品色婷婷福利天堂| 搜成人激情视频| 男人的天堂avav| 91一区二区在线| 中文字幕在线播出| 伊人伊成久久人综合网小说| 日韩一区网站| av动漫在线观看| 国产精品久久久久影院老司| 人妻精品一区一区三区蜜桃91| 欧洲一区二区视频| 久久久久久久久久久9不雅视频| 色欲欲www成人网站| 在线精品视频免费播放| 91网址在线观看| 久久国产一区二区| 日韩1区2区3区|