精品欧美一区二区三区在线观看 _久久久久国色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| 亚洲天堂精品在线观看| 91一区二区三区| 91国产丝袜播放在线| 日韩精品福利一区二区三区| 欧美亚洲愉拍一区二区| 国产91porn| 欧美理论在线观看| 精品在线观看免费| 国产91精品久| 欧美国产日韩在线观看成人| 国产精品99久久免费观看| 在线亚洲一区二区| www.日本在线视频| av电影在线观看| 成人国产视频在线观看| 国产精自产拍久久久久久| 国产第一页在线播放| 久久国产精品亚洲人一区二区三区 | 欧美91看片特黄aaaa| 亚洲欧美日韩国产手机在线| 蜜桃传媒一区二区| 午夜美女福利视频| 麻豆精品新av中文字幕| 欧美中文在线观看国产| 久草免费新视频| 久久影视一区| 国产亚洲精品高潮| 最近中文字幕无免费| 成人国产精品一区二区网站| 在线观看日韩av先锋影音电影院| 国产精品成人久久电影| 国产黄a三级三级三级av在线看| 久久久久久**毛片大全| 国产区欧美区日韩区| 99久久精品国产一区色| 麻豆传媒一区二区三区| 国产精品久久精品| 自拍偷拍校园春色| 久久国产精品毛片| 2021国产精品视频| 国产成人精品a视频一区| 狠狠88综合久久久久综合网| 欧美成人中文字幕| 99久久婷婷国产综合| 日韩一区欧美| 少妇激情综合网| 一本色道久久88| 日韩av在线中文字幕| 色小说视频一区| 久久久久久国产免费a片| 深爱激情综合网| 亚洲丝袜在线视频| 亚洲一区二区自偷自拍| 国产精品一区二区99| 亚洲免费伊人电影在线观看av| 国产精品一级黄片| 欧美大胆视频| 日韩精品在线免费| 国产白嫩美女无套久久| 天海翼精品一区二区三区| 亚洲国产成人av在线| 久久久久久久无码| 西瓜成人精品人成网站| 亚洲男女性事视频| av无码av天天av天天爽| 国产成人黄色| 日韩中文字幕网址| 乱h高h女3p含苞待放| 欧美成人tv| 国产+成+人+亚洲欧洲| 国产精品成人av久久| 国产精品久久久久久久免费软件| 国产91精品久| 中文字幕 日韩有码| 韩国毛片一区二区三区| 成人av蜜桃| 天天干天天色天天| 国产清纯在线一区二区www| 一本一道久久a久久精品综合| 麻豆电影在线播放| 亚洲一卡二卡三卡四卡无卡久久 | 中文字幕资源网在线观看免费 | 国产精品无码一区二区桃花视频| 国产精品一区免费在线观看| 国产免费一区二区三区| 毛片网站在线| 亚洲欧美日韩在线| 日韩国产欧美亚洲| 国产成人精品一区二区三区免费| 日韩一区二区三区av| 日本黄色录像片| 三上亚洲一区二区| 国内揄拍国内精品| 中文字幕人妻一区二区三区视频 | 欧美黑人欧美精品刺激| 久久综合成人| 97在线免费观看视频| 亚洲天堂中文字幕在线| www.久久精品| 亚洲资源在线网| 日韩伦理精品| 欧美一区二区三区公司| 无遮挡aaaaa大片免费看| 91视频一区| 青草青草久热精品视频在线网站 | 欧美成人精品三级网站| 91精品一区二区三区在线观看| 中文成人无字幕乱码精品区| 日韩欧美电影| 欧美一级淫片videoshd| www.黄色一片| 国产精品网站导航| 欧美久久久久久久久久久久久| 久久99久久久精品欧美| 日韩精品丝袜在线| 国产大学生自拍| 免费欧美日韩国产三级电影| 久久国产精品一区二区三区四区| 成人午夜在线影视| 欧美亚洲精品一区| 精品无码在线视频| 黑人一区二区| 成人在线视频电影| 国产一二区在线观看| 在线亚洲一区二区| 高潮毛片无遮挡| 国产精品最新自拍| 国产区一区二区| 暖暖在线中文免费日本| 日韩亚洲欧美成人一区| 无码人妻精品中文字幕| 美女性感视频久久| 亚洲二区三区四区| 免费观看成人性生生活片| 亚洲精品一区中文| 国产高潮久久久| av亚洲精华国产精华精华| 成人手机在线播放| 成人污污视频| 久久久精品免费视频| 11024精品一区二区三区日韩| 国产欧美视频一区二区三区| 久久精品99国产| 国产精品欧美三级在线观看| 欧美中文字幕在线观看| 四虎精品成人免费网站| 岛国av一区二区在线在线观看| 亚洲婷婷在线观看| 亚洲国产激情| 久久综合九九| 成人欧美大片| 国产亚洲xxx| 一区二区视频在线免费观看| 国产精品美女视频| 人人爽人人爽av| 亚洲一区二区| 国产98在线|日韩| 国内在线免费视频| 亚洲国产天堂久久综合网| 日韩免费一级片| 2020国产成人综合网| 免费在线观看的毛片| 欧洲激情综合| 成人欧美一区二区三区在线湿哒哒 | 日本a级片免费观看| 国产va免费精品观看精品视频 | 久久久免费精品视频| 日韩在线观看视频网站| 色综合一区二区| 国产视频不卡在线| 国产在线观看免费一区| 99久久免费观看| 在线一级成人| 成人免费在线视频网站| av在线网页| 亚洲天堂男人天堂| 99国产精品99| 色悠久久久久综合欧美99| 国产精品1区2区3区4区| 国产精品白丝jk白祙喷水网站| 成人精品视频在线播放| 国产麻豆精品久久| 亚洲一区二区少妇| 九色porny自拍视频在线播放| 国产一区二区三区日韩欧美| 精品国产无码AV| 日韩欧美福利视频| 黑鬼狂亚洲人videos| 91小视频在线免费看| 三上悠亚在线一区| 亚洲国产午夜| 亚洲欧美久久234| 美女av一区| 国产专区欧美专区| 在线观看网站免费入口在线观看国内| 最近2019中文字幕mv免费看| 亚洲成人777777| 欧美三级三级三级| 精品一区免费观看| 中文字幕亚洲视频| 亚洲蜜桃精久久久久久久久久久久| 久久99精品国产麻豆婷婷| a在线视频观看| 女人香蕉久久**毛片精品| 欧美不卡在线一区二区三区| 日韩免费一级| 国产美女久久精品香蕉69| 蜜桃麻豆影像在线观看| 欧美成人h版在线观看| 韩国福利在线| 日韩av有码在线| www.桃色av嫩草.com| 欧美日韩午夜在线| 亚洲欧美偷拍视频| 亚洲一二三四久久| www.毛片com| 欧美经典一区二区三区| 亚洲欧美日本一区| 国产69精品一区二区亚洲孕妇| 午夜久久久精品| 久久狠狠一本精品综合网| 国产人妻777人伦精品hd| 亚洲老妇激情| 在线观看亚洲视频啊啊啊啊| 精品久久成人| 欧美日韩一区综合| 日韩系列在线| 国产视频一区二区不卡| 亚洲国产精品免费视频| 91亚洲精品久久久| 色诱色偷偷久久综合| 国产精品青青在线观看爽香蕉| xxx欧美xxx| 日本欧美国产在线| 性欧美gay| 国产99久久久欧美黑人| 在线观看特色大片免费视频| 2018国产精品视频| 午夜伦理福利在线| 97精品视频在线| 国产资源在线观看入口av| 欧美精品激情在线观看| 国产经典三级在线| 久久久久久午夜| 波多野结衣乳巨码无在线观看| 欧美黄色性视频| 丰满诱人av在线播放| 久久人人爽人人| 麻豆免费在线| 国产成人精品午夜| 欧美va在线| 成人亚洲激情网| 亚洲精品一二三**| 国产伦一区二区三区色一情| 牛牛影视久久网| 久久综合毛片| 国产一区二区三区日韩精品 | 男女在线视频| 91精品国产乱码久久久久久蜜臀 | 美女100%露胸无遮挡| 中文一区二区在线观看| 小早川怜子一区二区的演员表| 亚洲欧美区自拍先锋| 久久香蕉精品视频| 精品久久久久久久久久久| 久久青青草原亚洲av无码麻豆| 日本丰满少妇一区二区三区| 国产又粗又猛又黄又爽| 欧美mv日韩mv国产网站app| 天堂在线视频网站| 亚洲女人被黑人巨大进入| av国产在线观看| 久久久久久久久久av| xxx欧美xxx| 亚洲一区二区三区视频播放| 久久aimee| 亚洲精品乱码久久久久久蜜桃91 | 91电影在线播放| 欧美精品一区二区免费| 高清毛片在线观看| 国产精品视频中文字幕91| 精品一区91| 欧美日韩国产免费一区二区三区| 天天做天天爱天天爽综合网| 黄色成人在线看| 麻豆精品一二三| 国产老熟女伦老熟妇露脸| 国产婷婷色一区二区三区| 久久久久久久久久网站| 一本一本久久a久久精品综合麻豆| 97国产成人无码精品久久久| 亚洲国产日韩精品在线| 黄色免费在线观看| 欧美有码在线观看视频| 国产一区二区三区免费在线| 欧美连裤袜在线视频| 中文字幕一区二区三三| www黄色av| 懂色一区二区三区免费观看| 九九热免费在线| 午夜av一区二区| 国产三级在线观看视频| 国产午夜精品免费一区二区三区 | 香蕉av福利精品导航| 一区二区视频播放| 亚洲女人天堂av| 波多野结衣久久| 91精品啪在线观看麻豆免费| 九一国产精品| 国产精品网站免费| 国产精品一二三区在线| 国产精品理论在线| 欧美日韩国产精品专区 | 亚洲人线精品午夜| a级片在线免费| 99re视频在线播放| 五月天久久777| 另类小说色综合| 久久久久久久久久电影| 日产精品久久久久久久| 日韩欧美一级在线播放| 毛片av在线| 国产精品亚洲欧美导航| 国产尤物久久久| 92看片淫黄大片一级| 成人精品国产免费网站| 国产一区二区三区丝袜| 人妻中文字幕一区二区三区| 日韩av有码在线| а√天堂资源官网在线资源| 亚洲sss综合天堂久久| 91欧美在线| 日本中文字幕二区| 国产精品卡一卡二| 超碰在线免费97| 亚洲最大在线视频| 国产v综合v| 日韩久久久久久久| 日韩成人免费在线| 精品人妻无码一区二区三区换脸| 欧美性猛交xxxx乱大交极品| 视频二区在线| 日本精品久久中文字幕佐佐木| 亚洲精品蜜桃乱晃| 免费日韩视频在线观看| 久久久亚洲精品石原莉奈| www.伊人久久| 国产视频丨精品|在线观看| 亚洲天堂资源| 欧美影视一区二区| 可以看av的网站久久看| 国产精品20p| 欧美日韩国产影片| 国产在线观看免费麻豆| http;//www.99re视频| 狠狠噜噜久久| 亚洲狠狠婷婷综合久久久久图片| 色综合久久久久久久| 国产区视频在线播放| 国产一区二区色| 黄色日韩精品| xfplay5566色资源网站| 欧美性色视频在线| eeuss影院www在线观看| 91热精品视频| 亚洲高清在线| 韩国三级hd中文字幕| 欧美高清hd18日本| 羞羞网站在线免费观看| 国产视频精品网| 免费的成人av| 国产精品theporn动漫| 日韩高清av一区二区三区| 欧洲成人一区| 国产又粗又爽又黄的视频| 成人免费视频视频| 精品乱码一区内射人妻无码| 美女啪啪无遮挡免费久久网站| 黄色欧美网站| 一道本在线免费视频| 亚洲精品乱码久久久久久| 色久视频在线播放| 成人黄色av播放免费| 狠狠色丁香久久综合频道| 爱爱免费小视频| 欧美一二三在线| 欧美电影免费观看高清完整| 99热都是精品| 91在线观看一区二区| 亚洲中文字幕一区二区| 性欧美激情精品| 日韩精品一卡| 国产又粗又猛又色| 在线播放欧美女士性生活| 美女网站在线看| 50度灰在线观看| 中文字幕不卡一区| 亚洲 精品 综合 精品 自拍|