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

ServerFrame::HashMap VS stl::unordered_map-性能探究之旅

企業動態
突然就對項目中的HashMap有了強烈的好奇心,這個HashMap的實現夠高效嗎,和 std::unordered_map 的效率比較性能如何?

[[203360]]

1. 引言

突然就對項目中的HashMap有了強烈的好奇心,這個HashMap的實現夠高效嗎,和 std::unordered_map 的效率比較性能如何? 他們的插入效率、查找效率、空間使用率對比起來是分別是什么樣的?也沒有找到相關的測評,于是就自己動手,測試了一下,并對一些影響性能的地方修改、驗證自己的猜想,最終得到一個比較好的hashmap的實踐。整個過程還是比較有意思的,現記錄并分享出來。

1.1 好了別的不說了給我結論就好

好吧,大家都很忙,先給一下簡要結論,時間緊迫的同學也可以直接跳到文尾查看結論小節.

  1. ServerFrame::HashMap 的哈希算法算出來的哈希值散列度不夠,key的長度越長,散列能力越差,性能越差。
  2. 因為沖突處理的緣故,本文所做的幾個用例中,極端情況下 ServerFrame::HashMap 的表現比 stl::unordered_map 差100倍;
  3. 哈希算法散列程度足夠的時候,ServerFrame::HashMap 的表現比 stl::unordered_map 好。前者的插入效率是后者的10倍,查找效率3倍;
  4. 存儲同樣的數據,HashMap 耗內存多于 unordered_map;

1.2 show me the code

本文用到的測試代碼和測試結果全部在 git.oa.com中,有興趣的同學可以下載查看。

  1. 倉庫路徑:http://git.code.oa.com/lawrencechi/hashmap-benchmark.git 
  2. 成文時倉庫版本 tag:v2.0 
  3. 內存: 12G 
  4. cpu 2核:   i7-6700 CPU 3.40GHz 
  5. ServerFrame::HashMap: 編譯時預設的容量是 8000萬 
  6.  
  7. 測試用例: 
  8. lawrencechi@lawrencechi-VirtualBox /data/hashmap-benchmark/hashmap-benchmark/build ±master:zap: » ./bm_hashmap.O2 
  9. Usage: bm_hashmap.O2 [-n count] -hijklmop 
  10.    -h: hashmap-int 
  11.    -i: hashmap-string(32 byte) 
  12.    -j: unordered-map-int 
  13.    -k: unordered-map-string 
  14.    -l: hashmap(32 byte)) idx 
  15.    -m: hash<string> idx 
  16.    -o: hashmapplus(32 byte)) idx 
  17.    -p: hashmapplus-string(32 byte)) 

2.int類型key

2.1用例結果

執行./bm_hashmap.O2 -n 700 -hj,獲得數據,并繪制圖表如下(畫圖數據經過省略,但關鍵信息還在,下同)

[圖: 2.1插入耗時 ]

[ 圖:2.1查找耗時 ]

總體來看,兩個實現的效率都很高,穩定(斜率不變,意味著單位時間內插入條數沒有變化),插入8000萬條數據最多只需要4.5s, 在使用 ServerFrame::HashMap插入數據的時候,HashMap甚至能夠達到 stl::unordered_map的10倍;當key不存在的時候,HashMap 查找速度也比 unordered_map 快4倍, key 存在的時候,容量少于5000萬條時,HashMap 比 unordered_map 快,只有大于5000萬時,兩者查找的速度才相差不大。

這次測試看起來 HashMap 實現得非常完美,很好地解決了預設需求,插入效率高、查找效率高。雖然耗費的內存多,僅存8000萬個int的 HashMap 需要 3.5G 的內存,但現代服務器內存充足,這個缺點似乎是可以忍受的。

除了內存之外,ServerFrame::HashMap 的實現就沒有其他的缺點了嗎? 很快,我就想到了他的 Hash 函數和沖突處理,決定從這里入手繼續分析。

2.2 隱憂:hash算法

ServerFrame::HashMap 的 hash 算法實現是將 key 的 buffer(sizeof(key)),按照 int 字節累加,并將其結果和哈希表容量進行取余,簡單粗暴,而且似乎也符合大道至簡的理論。但是仔細想想,這個地方的實現違背了哈希算法的原則:均衡性。一個不夠均衡性的算法會導致大量沖突,最終使得HashMap在反復的沖突處理中疲于奔命。

很簡單,按照這個算法下面的這些數據算得到的哈希值都是一樣的,而且這樣的數據可以輕易地構造:

  1. 0xFFFFFFFF, 
  2. 0xFFFFFFFF 00000000 
  3. 0xFFFFFFFF 00000000 00000000 
  4. 0xFFFFFFFF 00000000 00000000 00000000 

最為對比,我們都知道構造兩個擁有同樣MD5值的數據是何等的困難。

而且仔細分析一下可以知道 2.1 用例剛好繞過了這個算法的缺陷,取到的key都不會相互沖突! 這時候的測試結果恰恰是最優結果!

如果沖突了會怎么樣,測試結果變成怎么樣? 在好奇心驅使下,我馬上進行 3.1 用例的測試。

3. buffer(32byte)類型

3.1用例結果

執行./bm_hashmap.O2 -n 700 -ik,獲得數據,并繪制圖表如下

[圖: 3.1插入耗時 ]

從上圖可以看到,對于buffer類型的key,性能表現差異很大.

從HashMap的圖來看,越到后面斜率越大,說明到后面的時候,插入單位條數的耗時已經急劇增長。這是符合我們的設想的,此時程序在拼命進行沖突處理!

從圖中還可以得到一個信息,插入7000萬條數據,HashMap的耗時是接近2500秒,也就是41分鐘!

至于unordered_map,上圖已經分析不出什么東西來,和HashMap比起來,它的變化太緩慢了。我只能抽出來單獨分析,圖如下:

[ [圖:3.1插入耗時-unordered_map ]

unordered_map 斜率幾乎不變,可以知道每次插入的耗時是相同的,穩定,插入7000萬條數據,耗時25s,HashMap差不多是他的100倍。

從上面的測試結果可知 HashMap 的效率的確是急劇下降,但是這個急劇下降是 Hash 算法引起的嗎? 還是需要定量分析!

4. hash 算法比較

4.1 unordered_map

stl::unordered_map 是C++11引進的,老版本也有,只是沒有提供接口出來供外部使用。

恰好手頭上有 gcc 4.9.3 的代碼,于是一探究竟

  1. //代碼片段 ================== 
  2.     //file:/data/study/gcc/gcc.4.9.3/gcc-4.9.3/libstdc++-v3/libsupc++/hash_bytes.cc +73 
  3.     size_t _Hash_bytes(const void* ptr, size_t len, size_t seed) 
  4.     { 
  5.         const size_t m = 0x5bd1e995; 
  6.         size_t hash = seed ^ len; 
  7.         const char* buf = static_cast<const char*>(ptr); 
  8.  
  9.         // Mix 4 bytes at a time into the hash. 
  10.         while(len >= 4) 
  11.         { 
  12.             size_t k = unaligned_load(buf); 
  13.             k *= m; 
  14.             k ^= k >> 24; 
  15.             k *= m; 
  16.             hash *= m; 
  17.             hash ^= k; 
  18.             buf += 4; 
  19.             len -= 4; 
  20.         } 
  21.  
  22.         // Handle the last few bytes of the input array. 
  23.         switch(len) 
  24.         { 
  25.             case 3: 
  26.                 hash ^= static_cast<unsigned char>(buf[2]) << 16; 
  27.             case 2: 
  28.                 hash ^= static_cast<unsigned char>(buf[1]) << 8; 
  29.             case 1: 
  30.                 hash ^= static_cast<unsigned char>(buf[0]); 
  31.                 hash *= m; 
  32.         }; 
  33.  
  34.         // Do a few final mixes of the hash. 
  35.         hash ^= hash >> 13; 
  36.         hash *= m; 
  37.         hash ^= hash >> 15; 
  38.         return hash; 
  39.     } 

對于可以轉換成 size_t 類型的key,hash提供了幾個特化哈希函數,直接返回((size_t)key),上面的哈希函數是buffer類型的哈希函數,傳入起始地址,得到哈希值。這個hash算法用了幾個魔數,各種位運算得到一個 int32 的值,好吧,此時我已經不知道怎么才能構造兩個碰撞數據了。

最為對比,HashMap的hash函數如下:

  1. template <typename KEY_TYPE, typename DATA_TYPE, int NODE_SIZE, typename CMP_FUNC, int HASH_SIZE> 
  2. int CHashMap<KEY_TYPE, DATA_TYPE, NODE_SIZE, CMP_FUNC, HASH_SIZE>::HashKeyToIndex(const KEY_TYPE& rstKey, int& riIndex) const 
  3.     size_t uiKeyLength = sizeof(rstKey); 
  4.     unsigned int uiHashSum = 0; 
  5.  
  6.     //目前Hash算法實現比較簡單只是將Key值的每個字節的值加起來并對SIZE取模 
  7.     unsigned int i; 
  8.     for( i = 0; i < uiKeyLength / sizeof(unsigned int); ++i) 
  9.     { 
  10.         unsigned int uiTmp = 0; 
  11.         memcpy(&uiTmp, ((char*)(&rstKey))+sizeof(uiTmp)*i, sizeof(uiTmp)); 
  12.         uiHashSum += uiTmp; 
  13.     } 
  14.  
  15.     if(uiKeyLength % sizeof(unsigned int) > 0) 
  16.     { 
  17.         unsigned char* pByte = (unsigned char*)&rstKey; 
  18.         pByte += (uiKeyLength - (uiKeyLength % sizeof(unsigned int))); 
  19.         unsigned int uiTemp = 0; 
  20.         memcpy((void *)&uiTemp, (const void *)pByte, uiKeyLength%sizeof(unsigned int)); 
  21.         uiHashSum += uiTemp; 
  22.     } 
  23.  
  24.     uiHashSum = (uiHashSum & ((unsigned int)0x7fffffff)); 
  25.     riIndex = (int)(uiHashSum % HASH_SIZE); 
  26.     return 0; 

4.2 用例設計

4.3 用例結果

執行./bm_hashmap.O2 -n 700 -lm,獲得數據,并繪制圖表如下

碰撞太頻繁了,為了可讀性,這里對原始數據做了二次統計。統計每一個沖突鏈表的長度,以及key數量和占比。key數量之和是 7000萬,占比之和是100%。

這個表格就一目了然了:

  • 我們最期望的結果是沒有沖突,也就是鏈表長度為1,僅占比0.265%!
  • 絕大部分的沖突鏈表長度在100以上, 占了總量的 95%.
  • 最長的鏈表達到了 5000以上,而且占比 有 0.705%,比我們期望的不沖突的占比還多了3倍。也就是說最差情況的比最好情況多了3倍。

作為對比,stl::unordered_map 的結果就好看很多了,甚至都不需要進行二次統計、處理:

那么,猜想一下,如果替換掉 ServerFrame::HashMap 的哈希算法,是不是測試的效果就會好很多呢?

5. 升級HashMap hash算法之后測試

開搞,把gcc4.9.3的哈希算法移植到 ServerFrame::HashMap,并放到一個新命名空間中,另存為文件 HashMapPlush.hpp。 重做3.1的測試用例 ./bm_hashmap.O2 -n 700 -lm,獲得數據,并繪制圖表如下

可見升級哈希算法之后,沖突還是存在,但是沖突鏈表過長的現象已經不存在了,最長的沖突鏈表長度也只有10。此時可以想象耗時數據肯定好了很多。

[ 圖:5.1插入耗時 ]

可見,調整較小,但是效果比較明顯

ServerFrame::HashMap 的插入耗時是 unordered_map 的 1/2;

ServerFrame::HashMap 斜率很穩,可見插入耗時比較穩定

6. 結論

從上面的實驗可以看出,影響 HashMap 效率的主要是 哈希算法 和 內存分配算法,在哈希算法足夠散列的情況下,預分配方式的效率更高。

空間換時間的策略是對的,兩個影響因素,另個不夠好的時候,靠空間得到的優勢反而會損失;

原文鏈接:https://www.qcloud.com/community/article/625434

【本文是51CTO專欄作者“騰訊云技術社區”的原創稿件,轉載請通過51CTO聯系原作者獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2022-08-12 12:23:55

golangmap數據結構

2025-04-22 08:39:14

編程容器map

2024-03-18 09:44:02

HashMap算法Java

2023-01-05 08:55:00

2025-09-30 09:34:14

2023-11-21 16:13:38

C++代碼

2021-07-09 09:12:40

STL排序算法

2017-01-04 10:18:00

React NativScrollViewAndroid

2011-02-22 09:40:18

HashMap

2011-06-08 16:59:04

性能測試載測試壓力測試

2020-05-18 07:00:00

性能測試壓力測試負載測試

2023-01-30 08:42:33

CSS選擇器性能

2017-06-09 11:00:42

前端DOMElement

2014-04-28 10:17:01

2024-06-24 07:00:00

C++RustGo

2024-12-17 08:28:30

2010-03-10 18:42:30

Python性能

2015-01-06 09:59:03

2020-11-20 14:02:22

HashMap遍歷Java

2009-02-06 14:26:37

UbuntuVistaWindows7
點贊
收藏

51CTO技術棧公眾號

奇米777在线| 国产精品久久久久久久久久小说| 成人综合久久网| 免费在线看电影| 久久精品一区二区| 亚洲japanese制服美女| 91视频免费网址| 国产精品精品国产一区二区| 亚洲成人网在线| 男人添女人下面免费视频| 韩国日本一区| 国产精品久久久久久久久搜平片| 国产亚洲福利社区| 国产老女人乱淫免费| 国产一区二区三区的电影 | 一区二区三区高清视频在线观看| 精品免费99久久| 天堂av在线网站| 第一av在线| 国产精品理论在线观看| 久久精品国产精品国产精品污| 一本大道伊人av久久综合| 亚洲三级视频| 久久999免费视频| 成人午夜免费影院| 免费av一区二区三区四区| 日韩午夜电影av| 国产精品一区二区小说| 97se综合| 黄色一区二区三区| 成人免费a级片| 美女国产在线| 久久九九久久九九| 精品国产一区二区三| 精品国产av一区二区| 美腿丝袜在线亚洲一区| 国产91成人video| 黄色小说在线观看视频| 一精品久久久| 久久久久北条麻妃免费看| 男人的天堂av网| 国产精品美女久久久久久不卡| 亚洲精品福利在线观看| 涩视频在线观看| 在线日韩成人| 日韩精品专区在线影院重磅| 一区二区三区国产好的精华液| 国产精品亚洲成在人线| 欧美群妇大交群中文字幕| 免费男同深夜夜行网站 | 亚洲一二三专区| 无码人妻精品一区二区蜜桃百度| 国产在线观看91| 亚洲欧洲精品成人久久奇米网| 一区二区精品视频| 午夜伦全在线观看| 亚洲视频免费看| 免费观看国产视频在线| av网站网址在线观看| 亚洲嫩草精品久久| 少妇久久久久久被弄到高潮| 亚洲第一图区| 亚洲成人tv网| 欧美牲交a欧美牲交aⅴ免费真| 在线女人免费视频| 在线观看日韩高清av| 亚洲77777| 99久久这里有精品| 欧美不卡一区二区三区四区| 中文字幕在线视频播放| 色爱av综合网| 中文字幕日韩精品有码视频| √天堂中文官网8在线| 亚洲一级网站| 奇门遁甲1982国语版免费观看高清| 69成人免费视频| 免费看精品久久片| 亚洲一区二区在线| 六月丁香综合网| 久久精品一区二区三区不卡| 亚洲在线色站| 蜜臀av国内免费精品久久久夜夜| 亚洲va中文字幕| 日本激情视频在线| 日韩精品中文字幕一区二区| 亚洲国产欧美日韩精品| 内射毛片内射国产夫妻| 五月天久久久| 97视频在线免费观看| 美女黄页在线观看| 懂色av一区二区夜夜嗨| 免费久久99精品国产自| 美女羞羞视频在线观看| 亚洲成a人在线观看| 久久久国产欧美| 97超碰成人| 在线播放国产一区二区三区| 久一视频在线观看| 美腿丝袜亚洲色图| 久久99精品久久久久久水蜜桃 | av丝袜天堂网| 在线综合色站| 中文字幕欧美精品在线 | 精品视频一区二区三区免费| 永久免费看片在线观看| 欧洲美女日日| 97国产一区二区精品久久呦 | 黄色a级在线观看| 91精品论坛| 日韩亚洲欧美中文三级| 夫妇交换中文字幕| 国产一区二区高清| 成人免费视频观看视频| av在线首页| 欧美日韩中文字幕| 日本人妻一区二区三区| 日韩精品一区二区三区免费观影 | 国产精品全国免费观看高清| 妞干网在线观看视频| 四虎在线精品| 国产午夜精品一区二区三区| 日本熟女一区二区| 国产综合色视频| 亚洲图色在线| www.成人在线视频| 亚洲剧情一区二区| 日韩欧美激情视频| 成人小视频免费在线观看| 伊人天天久久大香线蕉av色| 桃色一区二区| 亚洲精品wwwww| 精品无码久久久久久久久| 极品少妇一区二区三区精品视频| 日本视频一区二区不卡| 亚洲精品动漫| 亚洲精品一区二区久| 日韩在线视频免费播放| 97se亚洲国产综合自在线不卡| 人妻激情另类乱人伦人妻| 国产一区二区视频在线看| 日韩日本欧美亚洲| 一区二区三区精彩视频| 国产精品国产三级国产普通话蜜臀| www.欧美日本| 不卡在线一区二区| 国产女同一区二区| 免费大片在线观看www| 6080午夜不卡| 欧美日韩黄色网| 国产精品996| 美女扒开大腿让男人桶| 黄色成人美女网站| 2019亚洲日韩新视频| 午夜av免费在线观看| 狠狠色狠狠色综合日日五| 青青草成人免费视频| 天堂资源在线中文精品| 视频一区视频二区视频三区视频四区国产| 蜜桃精品在线| 精品国产拍在线观看| 国产强伦人妻毛片| 亚洲午夜影视影院在线观看| 日韩女优在线视频| 校园激情久久| 亚洲7777| 日韩最新av| 136fldh精品导航福利| 青春草在线观看| 欧美日韩五月天| 91porn在线视频| 99在线热播精品免费| 亚洲人成色77777| 欧美国产一级| 国产98在线|日韩| 欧美性suv| 久久久久999| 午夜18视频在线观看| 欧美日韩国产影片| 欧美日韩国产精品一区二区三区| 99久久国产综合精品女不卡| 欧美自拍小视频| 欧美日本二区| 日韩wuma| avtt综合网| 国产精品久久久久久久一区探花| 91国内在线| 亚洲美女性视频| 国产乱淫av免费| 第一福利永久视频精品| 欧美性生交大片| 9i在线看片成人免费| 色综合色综合色综合色综合| 国产真实久久| 一本一本a久久| 欧美一级二级三级视频| 国产在线精品一区免费香蕉| 国产伦理精品| 久久艳片www.17c.com| 嫩草研究院在线观看| 91精品国产黑色紧身裤美女| 亚洲高清毛片一区二区| 亚洲精品自拍动漫在线| 久久亚洲AV无码专区成人国产| 国产成人福利片| 9久久婷婷国产综合精品性色| 黑丝一区二区| 亚洲一区二区在线免费观看| 欧美交a欧美精品喷水| 成人信息集中地欧美| 深夜视频一区二区| 91国在线精品国内播放| 99福利在线| 最新亚洲国产精品| 久久久久久女乱国产| 亚洲激情电影中文字幕| 国产xxxx孕妇| 欧美精品自拍偷拍动漫精品| 国产美女www| 欧美性xxxxx极品娇小| 精品深夜av无码一区二区老年| 自拍偷拍亚洲激情| www..com.cn蕾丝视频在线观看免费版 | 久久伊人亚洲| 国产精品999视频| 欧美天天在线| 欧美中日韩在线| 欧美成人综合| 国产一二三四五| 亚洲精品久久久| 资源网第一页久久久| 日韩成人综合| 午夜精品视频在线观看一区二区 | 成人国产精品免费网站| 四虎成人在线播放| 精品一区二区三区免费观看| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 亚洲视频www| 131美女爱做视频| 99伊人成综合| 欧美精品久久久久久久免费| 亚洲精品裸体| www国产精品内射老熟女| 极品av少妇一区二区| 日本熟妇人妻xxxx| 好吊日精品视频| 国产主播自拍av| 中文欧美日韩| 国产免费一区二区三区视频| 乱码第一页成人| 不卡av免费在线| 美国三级日本三级久久99| 男生操女生视频在线观看 | 欧美亚洲自拍偷拍| 亚洲精品91天天久久人人| 欧美影视一区在线| 一本久道久久综合无码中文| 91精品国产综合久久久蜜臀粉嫩| 国产欧美日韩成人| 精品国产免费视频| 性xxxx18| 这里只有精品丝袜| 欧美精品videos另类| 亚洲国产日韩av| 久久无码精品丰满人妻| 亚洲高清免费一级二级三级| 国产中文字字幕乱码无限| 婷婷亚洲久悠悠色悠在线播放 | 国产高清一区二区三区视频| 超在线视频97| 91在线超碰| 国产91精品在线播放| 日韩成人一区| 国产久一道中文一区| 午夜精品福利影院| 亚洲午夜在线观看| 亚洲天堂黄色| 欧美成人黑人猛交| 国产在线不卡一卡二卡三卡四卡| 无码人妻精品一区二区三| 91免费国产在线| 99热99这里只有精品| 亚洲国产日韩精品| 国产精华7777777| 欧美大片在线观看| 大胆av不用播放器在线播放| 久久国产精品电影| 日本乱码一区二区三区不卡| 国产精品直播网红| 欧美日韩中出| 日韩av高清在线播放| 欧美女激情福利| 亚洲综合在线网站| 国产精品亚洲午夜一区二区三区| 中文字幕日韩三级片| 亚洲视频免费在线| 不卡av电影在线| 日韩精品中午字幕| 婷婷成人激情| 欧美亚洲免费电影| 玖玖玖视频精品| 日韩av电影免费播放| 国内一区二区三区| gai在线观看免费高清| 91亚洲精品久久久蜜桃网站| 在线观看黄网址| 色哟哟亚洲精品| 欧美综合视频在线| 久久亚洲精品国产亚洲老地址| 在线天堂新版最新版在线8| 91久久极品少妇xxxxⅹ软件 | 91亚洲精品一区二区乱码| 国产一区二区三区在线视频观看| 日本精品视频一区二区三区| 成人午夜免费福利| 久久国产一区二区三区| 女生影院久久| 精品一区日韩成人| 午夜久久影院| 日本网站在线看| 国产精品国产成人国产三级| 日本一本在线观看| 日韩乱码在线视频| 日批在线观看视频| 成人6969www免费视频| 国产日本在线播放| 国内精品写真在线观看| 精品人妻互换一区二区三区| 亚洲香蕉伊在人在线观| 国产精品乱码一区二区| 伊是香蕉大人久久| 色老太综合网| 欧美一级爽aaaaa大片| 国产亚洲精品bv在线观看| 亚洲欧美高清在线| 亚洲一区二区成人在线观看| 99国产揄拍国产精品| 久久精品中文字幕一区| 成人国产精品| 亚洲免费视频一区| 免费在线观看不卡| 人妻无码一区二区三区免费| 91国偷自产一区二区使用方法| 深夜福利免费在线观看| 国产69精品久久久久久| 一本久久青青| 男人搞女人网站| 中文字幕精品一区二区精品绿巨人| 91国视频在线| 丁香一区二区三区| 日本中文字幕免费| 日韩av在线网站| 97成人资源| 相泽南亚洲一区二区在线播放 | 六月婷婷久久| 亚洲日产国产精品| 黄色正能量网站| 色婷婷久久久综合中文字幕 | 亚洲国产精品黑人久久久| 亚洲午夜无码久久久久| 日韩视频中文字幕| 亚洲欧美在线人成swag| 日韩一二区视频| 99久久精品一区二区| 亚洲黄色免费观看| 亚洲一级黄色av| 国产精品高清一区二区| www.亚洲成人网| 久久免费电影网| 一级特黄aaa大片| 欧美大片网站在线观看| 欧美三级自拍| 香蕉视频禁止18| 亚洲最快最全在线视频| 日本一级在线观看| 国产精品免费网站| 欧美韩国一区| 女人被狂躁c到高潮| 欧美日韩一区二区欧美激情 | 青草热久免费精品视频| 日韩国产一区二区三区| 亚洲美女精品视频| 色av综合在线| av大全在线| 美媛馆国产精品一区二区| 蜜臀av一区二区| 久久精品国产亚洲av无码娇色| 亚洲性xxxx| 136福利精品导航| 亚洲三级视频网站| 亚洲综合丝袜美腿| 粉嫩av一区| 好吊色欧美一区二区三区视频| 久久精品国产99久久6| 国产精品suv一区二区69| 日韩在线小视频| 亚洲桃色综合影院| 黑人无套内谢中国美女| 91国偷自产一区二区三区成为亚洲经典| 婷婷av在线| 亚洲综合欧美日韩|