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

對比C++并發庫,Rust簡直不要太像!

譯文 精選
開發
C++可以繼續成為Rust的靈感來源,盡管“直接復制粘貼”的想法并不值得提倡,但好的思想還是要學習和繼承的。

譯者 | 盧鑫旺

審校 | 云昭

將Rust比作C++的小弟的話,相信大家都不會有異議。Rust借鑒了許多C++的設計思想。并發特性亦是如此。

Rust標準庫的并發特性與C++ 11中的特性非常相似:線程、原子操作、鎖和互斥量、條件變量等等。然而,在過去的幾年中,隨著C++ 17和C++ 20發布,C++已經獲得了相當多新的與并發相關的特性,未來的版本還會有更多的可借鑒之處。

讓我們花點時間來回顧一下C++的并發特性,討論一下這些特性在Rust下會是什么樣子的,以及要達到這個效果需要做些什么。

atomic_ref 

P0019R8引入了std::atomic_ref到C++ 中。它是一種允許你將非原子對象用作原子對象的類型。例如,你可以創建一個atomic_ref<int>,它引用一個常規的int類型的變量,這時你可以使用與原子類型atomic<int>相同的功能,就跟它是atomic<int>一樣。

在C++中,這需要一個復制大部分原子接口的全新類型,而等效的Rust特性是一行函數:atomic*::from_mut。例如,該函數允許你將&mut u32轉換為&AtomicU32,這是一種在Rust中完全正確的別名形式。C++ atomic_ref類型附帶了需要手動維護的安全要求。只要你使用atomic_ref來訪問對象,那么對該對象的所有訪問都必須通過atomic_ ref。當仍然存在atomic_ref時直接訪問它會導致未定義的行為。然而,在Rust中,這已經由借用檢查器完全處理。編譯器理解,通過可變地借用u32,在借用結束之前,不允許任何東西直接訪問該u32。進入from_mut函數的&mut u32的生命周期將作為從中得到的&AtomicU32的一部分保留。你可以根據需要復制任意數量的&AtomicU32副本,但只有在該引用的所有副本都消失后,原始借用才會結束。

from_mut函數目前不太穩定,但也許是時候穩定它了。

泛型原子類型 

在C++中,std::atomic是泛型的:你可以有一個atomic<int>,也可以有atomic<myownstuct>。另一方面,在Rust中,我們只有特定的原子類型:AtomicU32、AtomicBool、AtomicUsize等。

C++的原子類型支持任何大小的對象,無論平臺是否支持。對于平臺本機原子操作不支持的大小的對象,它會自動返回到基于鎖的實現。Rust則只提供平臺本機支持的類型。如果你正在用沒有64位原子的平臺進行編譯,則AtomicU64不存在。

這有優點也有缺點。這意味著使用AtomicU64的Rust代碼可能無法在某些平臺上編譯,但也意味著當某些類型默默地返回到一個非常不同的實現時,不會出現與性能相關的意外。這也意味著我們可以假設一個AtomicU64與內存中的u64完全相同,允許使用類似AtomicU64::from_mut的函數。在Rust中使用一個泛型原子類型atomic<T>來處理任何大小的類型可能會很棘手。沒有專門化,我們無法使automic<LargeThing>包含Mutex,而不將其包含在automic<SmallThing>中。然而,我們可以做的是將互斥量存儲在一個全局HashMap中,由內存地址索引。然后,automic<T>的大小可以與T相同,并在必要時使用此全局HashMap中的互斥量。這就是流行的atomic所做的事情。在Rust標準庫中添加這樣一個通用的范型automic<T>類型的建議需要討論它是否應該在no_std程序中使用。常規哈希映射需要分配,這在no_std程序中是不可能的。固定大小的表可能適用于no_std程序,但由于各種原因可能不受歡迎。

Compare-exchange與填充 

P0528R3更改了compare_exchange處理填充的方式。atomic<TypeWithPadding>上的比較交換操作也用于比較填充位,但結果證明這是一個壞主意。如今,填充位不再包括在比較中。

由于Rust目前只為整數提供原子類型,沒有任何填充,因此此更改與Rust無關。然而,使用compare_exchange方法的atomic<T>方案需要討論如何處理填充,并且可能需要從該方案中獲取輸入。

Compare-exchange內存排序 

在C++11中,compare_exchange函數要求成功內存排序至少與失敗排序一樣強。不接受compare_exchange(…,…,memory_order_release,memory_ order_ acquire)。該要求被逐字復制到Rust的compare_exchange函數中。P0418R2認為應取消此限制,這是C++17的一部分。作為Rust 1.64和Rust lang/Rust#98383的一部分,解除了相同的限制。

Constexpr互斥量構造函數 

C++的std::mutex有一個constexpr構造函數,這意味著它可以在編譯時作為常量求值的一部分進行構造。然而,并非所有的實現都真正提供了這一點。例如,微軟的std::mutex實現不包括constexpr構造函數。因此,依賴這一點對于可移植代碼來說是個壞主意。

另外,有趣的是,C++的std:: condition_variable和std:: shared_mutex根本不提供constexpr構造函數。在Rust 1.0中,Rust的原始互斥不包括常量fn new。再加上Rust對靜態初始化的嚴格要求,這使得在靜態變量中使用互斥非常煩人。這在Rust 1.63.0中作為Rust lang/Rust#93740的一部分得到了解決,所有:?

  • Mutex:: new
  • rBlock:: new
  • Condvar:: new

現在都是常量函數。

Latches與barriers 

P1135R6在C++20中引入了std::ltatch和std::barriers,這兩種類型都允許等待多個線程到達某一點。latch基本上只是一個計數器,它由每個線程遞減,并允許你等待它達到零。它只能使用一次。barrier是這種思想的更高級版本,可以重復使用,并接受計數器達到零時自動執行的“完成函數”。Rust從1.0開始就有了類似的barrier類型。它是受pthread(pthrea_Barrier_t)而不是C++的啟發。Rust的(和pthread的)barrier不如C++中現在包含的靈活。它只有一個“遞減和等待”操作(稱為等待),并且缺少C++的std::barrier附帶的“僅等待”、“僅遞減”和“遞減和刪除”函數。另一方面,與C++不同,Rust(和pthread)的“遞減和等待”操作將一個線程指定為組長。這是完成函數的一種(可能更靈活)替代方法。

Rust版本上缺失的操作可以在任何時候輕松添加。我們所需要的只是這些新方法的名稱的一個好建議。

信號量 

同樣的,P1135R6還向C++20添加了信號量:

  • std::counting_semaphore
  • std::binary_semaphore

Rust沒有通用的信號量類型,盡管它確實通過thread::park和unpark為每個線程提供了有效的二進制信號量。

使用Mutex<u32>和Condvar可以輕松地手動構建信號量,但大多數操作系統允許使用單個AtomicU32實現更高效、更小的實現。例如,通過Linux上的futex()和Windows上的waitoAddress()??梢杂糜谶@些操作的原子大小取決于操作系統及其版本。C++的counting_semaphore是一個模板,它以一個整數作為參數來指示我們希望能夠計數到什么程度。例如,counting_semaphore<1000>可以計數到至少1000,因此將是16位或更大。binary_semaphore類型只是counting_Sema phore<1>的別名,在某些平臺上可以是單個字節。在Rust中,我們可能還沒有很快為這種泛型類型做好準備。Rust的泛型強制了某種一致性,這對我們可以將常量作為泛型參數進行處理帶來了一些限制。

我們可以有單獨的信號量32、信號量64等等,但這似乎有點過分了。擁有信號量<u32>和信號量<u64>甚至信號量<bool>都是可能的,但這是我們以前在標準庫中沒有做過的事情。我們的原子類型簡單地是AtomicU32、AtomicU64等等。如上所述,對于我們的原子類型,我們只提供你正在編譯的平臺本機支持的類型。如果我們將同樣的理念應用于信號量,它將不存在于沒有futex或WaitoAddress功能的平臺上,例如macOS。如果我們有不同大小的單獨信號量類型,某些大小在(某些版本的)Linux和各種BSD上是不存在的。如果我們想在Rust中使用標準信號量類型,我們首先需要一些輸入,說明我們是否確實需要不同大小的信號量,以及需要何種形式的靈活性和可移植性才能使它們有用。也許我們應該只使用一種始終可用的32位信號量類型(使用基于鎖的回退),但任何此類建議都必須包括對用例和限制的詳細解釋。

原子等待和通知 

P1135R6添加到C++20的其余新功能是原子等待和通知函數。

這些函數通過標準接口有效地直接公開Linux的futex()和Windows的waitoAddress()。

然而,無論操作系統支持什么,它們都可以在所有大小的原子上、所有平臺上使用。Linux Futex(在FUTEX2之前)始終是32位的,但C++也允許atomic<uint64_t>:wait。

一種方法是使用類似于“停車場”的東西:有效地將內存地址映射到鎖和隊列的全局哈希映射。這意味著Linux上的32位等待操作可以使用非??焖俚幕趂utex的實現,而其他大小的操作將使用非常不同的實現。如果我們遵循只提供本機支持的類型和函數的理念(就像我們對原子類型所做的那樣),我們就不會提供這樣的回退實現。這意味著我們在Linux上只有AtomicU32::wait(和AtomicI32::wait),而在Windows上,所有的原子類型都包括這個wait方法。在Rust中使用Atomic*::wait和Atomic*::notify需要討論回退到全局表在Rust中是否合適。

jthread和stop_token 

P0660R10將std::jthread和std::stop_token添加到了C ++20中。

如果我們暫時忽略stop_token,jthread基本上只是一個在銷毀時自動獲取join()方法的的常規std::thread。這避免了意外地分離線程并使其運行的時間比預期的長,這在常規線程中可能會發生。然而,它也引入了一個潛在的新陷阱:立即銷毀jthread對象將立即加入線程,有效地消除了任何潛在的并行性。從Rust 1.63.0開始,提供了范圍線程(Rust lang/Rust#93203)。與jthread一樣,作用域線程也會自動加入。然而,它們的連接點是明確的,并且保證安全可靠。借用檢查器甚至可以理解這一保證,允許你安全地借用作用域線程中的局部變量,只要這些變量超出作用域。除了自動加入之外,jthreads的一個主要特性是其stop_token和相應的stop_ source。可以在stop_source上調用request_stop(),使stop_ token上相應的stopUrequest()方法返回true。這可以很好地要求線程停止,并在加入之前在jthread的析構函數中自動完成。由線程的代碼來實際檢查令牌,并在設置時停止。到目前為止,它看起來幾乎像一個普通的AtomicBool。不同的是stop_callback類型。這種類型允許用停止令牌注冊回調函數,即“停止函數”。使用相應的停止源請求停止將執行此功能。實際上,線程可以使用它來讓其他線程知道如何停止或取消其工作。

在Rust中,我們可以很容易地將類似atomicboolean的功能添加到thread:: Scope的Scope對象中。簡單的is_finished(&self) -> bool或stop_requested(&self) -> bool指示主作用域函數是否已完成可能就夠了??梢越Y合request_stop(&self)方法從任何地方請求它。

stop_callback特性更加復雜,任何Rust的等價功能都可能需要詳細的提議來討論它的接口、用例和限制。

原子浮點數 

P0020R6在C++ 20中增加了對原子浮點加法和減法的支持。在Rust中添加AtomicF32或AtomicF64也很容易,但吊詭的是,似乎目前原生支持原子浮點運算的平臺往往是GPU廠商,而Rust現在好像并沒有提供對這些平臺的支持。關于向Rust添加這些類型方面,強烈建議提供一些實用的用例。

字節原子內存 

目前,在Rust或C++中不可能有效地實現遵循內存模型所有規則的序列鎖。

P1478R7建議在未來的C++版本中添加atomic_load_per_byte_memcpy和atomic_store_per_byte_memcpy來解決這個問題。

對于Rust,這里給出一個想法,就是可以通過AtomicPerByte<T>類型:RFC 3301來公開功能。

原子shared_ptr 

P0718R2為C++20添加了atomic<shared_ptr>和atomic<weak_ptr>的專門化。

引用計數指針(C++中的shared_ptr,Rust中的Arc)通常用于并發無鎖數據結構。通過正確處理引用計數,原子<shared_ptr>專門化使正確執行此操作更加容易。

在Rust中,我們可以添加等效的AtomicArc<T>和AtomicWeak<T>類型。(雖然AtomicArc聽起來有點奇怪,但考慮到Arc的A已經代表“原子”了。)

然而,C++的shared_ptr<T>是可為空的,而在Rust中,它需要一個選項<Arc<T>。目前還不清楚AtomicArc<T>是否應該為空,或者我們是否也應該有一個AtomicOptionArc<T>。

流行的arc-swap已經在Rust中提供了所有這些變體,但據我所知,目前還沒有任何類似于標準庫的建議。

synchronized_value 

盡管P0290R2沒有被接受,但提出了一種稱為synchronized_value<T>的類型,它將互斥鎖與數據類型T組合在一起。盡管它當時沒有被C++接受,但這是一個有趣的建議,因為synchronize_value<T>與Rust中的Mutex<T>幾乎完全相同。

在C++中,std::mutex不包含它保護的數據,甚至根本不知道它保護的是什么。這意味著,需要由用戶來記住哪些數據受保護以及由哪個互斥鎖保護,并確保每次訪問“受保護”數據時鎖定正確的互斥鎖。Rust的Mutex設計,使用了一個類似于(可變的)T引用的MutexGuard,這使得安全性更高,同時在只需要一個互斥鎖而不需要任何數據的情況下,仍然允許使用Mutex<()>。synchronized_value的提議試圖將此模式添加到C++中,但是使用閉包而不是互斥鎖,因為C++不跟蹤生命期。

結語 

在筆者看來,C++可以繼續成為Rust的靈感來源,盡管“直接復制粘貼”的想法并不值得提倡,但好的思想還是要學習和繼承的。正如我們看到的Mutex,作用域線程,Atomic*::from_mut等,在Rust中提供相同功能的同時,事情往往會變得非常不同。

當然,提供與C++完全相同的功能不應該是主要目標。目標應該是準確地提供Rust生態系統從語言和標準庫中需要的東西,這可能與C++用戶從他們的語言中需要的東西不同。如果你有來自Rust標準庫的并發需求,而目前還沒有滿足,歡迎把它留在評論區,不管它是否已經用另一種語言解決了。

原文鏈接:

https://blog.m-ou.se/rust-cpp-concurrency/

譯者介紹

盧鑫旺,51CTO社區編輯,編程語言愛好者,對數據庫,架構,云原生有濃厚興趣,目前就職某跨境電商出海營銷公司,擔任后端開發工作。

責任編輯:薛彥澤 來源: 51CTO
相關推薦

2020-03-26 16:00:56

文件系統磁盤

2023-05-19 07:20:58

ClickHouse運維智能

2020-09-08 18:34:06

Python程序員學習

2021-07-28 14:20:13

正則PythonFlashText

2024-02-26 07:26:27

RustC++開發

2024-07-26 00:22:34

2022-10-21 18:41:23

RustC++Azure

2012-08-08 09:32:26

C++多進程并發框架

2024-06-24 07:00:00

C++RustGo

2024-04-28 09:26:40

RustRTTI二進制

2023-07-17 10:28:00

C/C++編程接口

2022-04-01 13:10:20

C++服務器代碼

2021-04-05 07:23:03

PDF應用編輯器

2021-03-04 05:45:15

APP手機熱點推薦

2023-05-23 13:59:41

RustPython程序

2010-02-03 15:11:53

C++內存區域

2022-03-25 09:57:18

C++Rust語言

2025-08-19 09:30:34

2019-11-22 10:06:24

PythonGolangJava

2025-03-03 00:00:00

點贊
收藏

51CTO技術棧公眾號

日韩伦人妻无码| 青青草视频网站| 蜜桃视频网站在线观看| 国产在线看一区| 欧美激情免费在线| 国产美女免费网站| 亚洲三区欧美一区国产二区| 欧美性xxxxhd| 欧美与动交zoz0z| 青青草在线免费视频| 久久99精品国产91久久来源| 性欧美亚洲xxxx乳在线观看| 国产又黄又粗又猛又爽的| 久久国产精品色av免费看| 欧美亚洲动漫制服丝袜| 国产freexxxx性播放麻豆| 搞黄视频在线观看| 成人蜜臀av电影| 国产欧美中文字幕| 日韩毛片一区二区三区| 亚洲一区欧美| 国产一区二区精品丝袜| 丰满岳乱妇一区二区| 欧美一级做一级爱a做片性| 精品女厕一区二区三区| 亚洲国产一二三精品无码| 在线a免费看| 久久亚区不卡日本| 国产精品入口免费| 国产三级视频在线播放| 奇米精品一区二区三区在线观看一 | 日韩成人精品一区| 亚洲精品国产福利| 久久久久中文字幕亚洲精品 | 久久黄色美女电影| 久久精品在线免费观看| 国产一区免费观看| www.亚洲欧美| 国产老女人精品毛片久久| 国产精品va在线播放| 久久久久久少妇| 99亚洲视频| 国产+人+亚洲| 激情综合网五月婷婷| 欧美a级在线| 大胆人体色综合| 国产日产精品一区二区三区的介绍| 精品国产精品国产偷麻豆| 亚洲欧美一区二区精品久久久| 视频免费在线观看| 国产精品丝袜在线播放| 日韩精品一区二区三区四区| 成人性生交视频免费观看| 亚洲一区有码| 欧美一区二区三区免费大片 | 加勒比色老久久爱综合网| 日韩欧美高清dvd碟片| 欧美性猛交xx| 91久久精品无嫩草影院| 欧美一区二区啪啪| 香蕉久久久久久av成人| 国内自拍欧美| 亚洲精品久久久久久下一站| 欧美做受喷浆在线观看| 国产精品探花在线观看| 中文字幕视频一区二区在线有码| 少妇一级黄色片| 国产精品毛片一区二区在线看| www.久久撸.com| 91麻豆免费视频网站| 欧美人成在线| 777午夜精品福利在线观看| 青青草成人av| 夜久久久久久| 国产成人涩涩涩视频在线观看| av首页在线观看| 精品一区二区三区不卡| 91久久国产综合久久蜜月精品| www天堂在线| 久久网站热最新地址| 日韩精品久久一区| av中文字幕在线观看| 亚洲.国产.中文慕字在线| 北条麻妃在线一区| 大胆国模一区二区三区| 欧美www视频| 亚洲一区二区三区蜜桃| 91精品国产麻豆国产在线观看| 欧美激情精品久久久久久久变态 | 久久精品二区三区| 91精品国产综合久久久久久蜜臀| 超碰在线人人干| 久久老女人爱爱| 青青在线免费视频| 国产综合色区在线观看| 日韩欧美国产不卡| 无码人妻丰满熟妇啪啪欧美| 欧美午夜久久| 国产精品久久久亚洲| 亚洲第一页综合| 国产目拍亚洲精品99久久精品| www婷婷av久久久影片| 日韩三级影视| 欧美xxxxx牲另类人与| www.日本高清视频| 国产精品美女久久久| **亚洲第一综合导航网站| 极品美乳网红视频免费在线观看| 亚洲日本va在线观看| 玩弄japan白嫩少妇hd| 亚洲视频一起| 日韩在线视频一区| 精品人妻一区二区三区潮喷在线 | 三级不卡在线观看| 高清国语自产拍免费一区二区三区| 国产午夜在线视频| 五月婷婷综合网| 美女又黄又免费的视频| 日韩欧美二区| 日本一本a高清免费不卡| 黄色一级a毛片| **网站欧美大片在线观看| 成人在线观看黄| 91成人精品在线| 久久精品中文字幕| 国产有码在线观看| 国产精品毛片无遮挡高清| 1024av视频| 牛牛精品成人免费视频| 久久6免费高清热精品| 一级黄色片视频| 中文字幕av一区二区三区免费看 | 精品在线视频免费| 国产一区视频导航| 一区二区视频国产| 亚洲成人av观看| 亚洲深夜福利在线| 中文字幕亚洲精品一区| gogo大胆日本视频一区| 波多野结衣av一区二区全免费观看| 欧洲亚洲精品| 久久精品精品电影网| 国产又粗又猛又爽又黄视频| 国产精品美女久久久久aⅴ国产馆| 日韩在线第三页| 九色精品国产蝌蚪| 国产精品96久久久久久又黄又硬 | 欧美成人一区在线| 国产一区二区网站| 亚洲日韩欧美一区二区在线| 亚洲五月激情网| 欧美日韩 国产精品| av色综合网| 999精品网| 日韩成人在线观看| 亚洲不卡在线视频| 中文字幕欧美日韩一区| 色噜噜狠狠一区二区三区狼国成人| 国产精品二区不卡| ts人妖另类在线| 国产自产自拍视频在线观看| 亚洲欧美国产一区二区三区| 天天干天天色综合| 亚洲欧洲日韩在线| 国产免费无码一区二区| 国产日韩欧美一区| 午夜精品一区二区在线观看| 狂野欧美性猛交xxxx| 久久国产精品免费视频 | 成人白浆超碰人人人人| 国产白丝袜美女久久久久| 中文字幕伦av一区二区邻居| 国产欧美日韩精品丝袜高跟鞋| 免费的黄网站在线观看| 欧美成人一区二区三区片免费| 五月天婷婷丁香| 久久久激情视频| 日日干日日操日日射| 亚洲黄色大片| 亚洲春色在线视频| 日韩中文字幕无砖| 欧美中在线观看| 精品美女在线观看视频在线观看| 精品国产乱码久久久久久图片| 男人日女人网站| 亚洲婷婷综合久久一本伊一区| 一级黄色片毛片| 日韩在线观看一区二区| 麻豆传媒网站在线观看| 一道本一区二区三区| 91综合免费在线| 亚洲天堂导航| 久久精品99久久久香蕉| 天堂av在线7| 777奇米四色成人影色区| 西西44rtwww国产精品| 亚洲日本中文字幕区| 爱爱免费小视频| 国产成人免费xxxxxxxx| 最近中文字幕一区二区| 亚洲美女啪啪| 特级黄色录像片| 国产在线日韩精品| 国产三区二区一区久久| 日韩欧美专区| 人体精品一二三区| 国产区美女在线| 日韩在线观看免费av| 欧美日韩国产亚洲沙发| 精品第一国产综合精品aⅴ| 在线观看免费视频a| 精品久久久久久久久久久久久久| 日韩精品一区二区亚洲av性色| 久久青草国产手机看片福利盒子| 不许穿内裤随时挨c调教h苏绵| 精品一区二区三区免费观看| 男人搞女人网站| 久久电影一区| 欧美久久久久久久久久久久久| 一本精品一区二区三区| 日韩欧美亚洲在线| 伊人成综合网伊人222| 国产精品初高中精品久久| 国产999精品在线观看| 国产精品日韩一区| 欧美电影免费观看| 欧洲成人在线观看| 国内激情视频在线观看| 韩国三级日本三级少妇99| 男人天堂亚洲| 欧美高清不卡在线| gogo在线观看| 久久夜色撩人精品| 久做在线视频免费观看| 久久国内精品一国内精品| 日本综合在线| 日韩在线观看免费高清| 欧美jizzhd69巨大| 日韩在线精品视频| 毛片激情在线观看| 久久精品国产一区二区电影| 米奇777四色精品人人爽| 久久久成人精品视频| 黄色网页网址在线免费| 另类色图亚洲色图| 日本乱理伦在线| 久久久久国色av免费观看性色 | 午夜天堂在线视频| 精品夜夜嗨av一区二区三区| 亚洲一区二区福利视频| 国产一区二三区| 中文字幕永久免费| 9色porny自拍视频一区二区| 少妇精品一区二区| 久久久久一区二区三区四区| 在线观看日本中文字幕| 日本一区二区三区四区| 91ts人妖另类精品系列| 一区二区三区免费网站| 伊人国产在线观看| 色婷婷国产精品| 中文无码精品一区二区三区| 欧美日韩国产天堂| 国产黄色一级大片| 亚洲国产成人爱av在线播放| 艳母动漫在线看| 夜夜嗨av一区二区三区四区| 毛片在线看片| 亚州精品天堂中文字幕| 成人片免费看| 国产在线日韩在线| 欧美91在线| 视频一区视频二区视频三区高| 我不卡伦不卡影院| 妞干网在线观看视频| 老司机久久99久久精品播放免费| 精品亚洲一区二区三区四区| 国产成人啪午夜精品网站男同| 一区二区视频观看| 中文字幕中文乱码欧美一区二区 | 99精品国产在热久久| 无需播放器的av| 成人av资源站| 亚洲AV成人无码网站天堂久久| 亚洲福利视频一区二区| 亚洲中文无码av在线| 日韩欧美亚洲一区二区| 欧美白人做受xxxx视频| 欧美日韩xxx| 超薄肉色丝袜脚交一区二区| 福利视频久久| 色婷婷一区二区三区| 99在线精品免费视频| 视频在线观看一区| 欧美剧在线观看| 亚洲欧美天堂在线| 国产成a人亚洲精| 亚洲国产日韩一区无码精品久久久| 亚洲乱码国产乱码精品精98午夜| 成人午夜淫片100集| 91麻豆精品国产91久久久| 日韩欧美亚洲系列| 欧美乱大交xxxxx| 懂色aⅴ精品一区二区三区| 国产精品自拍首页| 天天天综合网| 国产a视频免费观看| 福利一区二区在线| 少妇一级黄色片| 欧美性xxxx极品hd欧美风情| 国产丰满果冻videossex| 国产一区二区三区久久精品| xxxx在线视频| 99电影网电视剧在线观看| 久久中文字幕av| 日本老熟妇毛茸茸| 99精品国产视频| 国产亚洲精品码| 欧美一区二区三级| 伊人免费在线| 国产精品嫩草视频| 国产欧美一区| 春日野结衣av| 成人综合在线视频| 久久综合综合久久| 欧美一区二区网站| 毛片免费不卡| 成人黄色中文字幕| 久久麻豆精品| 一道本视频在线观看| 国产亚洲综合在线| 日本高清不卡码| 亚洲免费av网址| 中文在线免费二区三区| 精品久久久久久综合日本| 在线国产欧美| 国产女人18毛片水真多18| 亚洲一级二级三级| 性一交一乱一乱一视频| 久久成年人免费电影| 久久亚洲精精品中文字幕| 欧美性受黑人性爽| 韩国精品在线观看| 日本黄色片免费观看| 欧美一二三区精品| 激情网站在线| 精品91免费| 麻豆九一精品爱看视频在线观看免费| 丰满大乳奶做爰ⅹxx视频| 欧美视频在线免费| 国产亚洲依依| 国产精品自产拍高潮在线观看| 色综合色综合| 韩国三级hd中文字幕有哪些| 一区二区三区国产| 欧美一级一区二区三区| 国内偷自视频区视频综合| 性欧美lx╳lx╳| 久久久精品三级| 中文字幕一区二区三区av| hs视频在线观看| 国产69精品久久久久9999| 妖精视频一区二区三区免费观看| 日韩 欧美 高清| 国产精品欧美久久久久无广告| 国产人妻精品一区二区三| 欧美精品激情在线| 免费成人结看片| 午夜国产福利在线观看| 亚洲国产一区二区视频| 午夜在线视频免费| 国产精品色悠悠| 好看的日韩av电影| 国产一区二区三区四区五区六区 | 欧美乱妇40p| 精品五月天堂| 国产一级特黄a大片免费| 亚洲色图.com| 天堂在线观看av| 国产精品久久久久久久久免费看| 久久久久久久久99精品大| 蜜桃色一区二区三区| 色婷婷av一区二区三区gif| 精品欧美色视频网站在线观看| 国产一区免费| 狠狠色综合日日| 国产成人无码精品亚洲| 精品国产欧美成人夜夜嗨| 久草在线综合| 爱豆国产剧免费观看大全剧苏畅| 性欧美疯狂xxxxbbbb| av在线免费观看网站| 国产精品日韩一区二区免费视频| 奇米777欧美一区二区| 久久久精品视频免费| xxxxx成人.com| 亚洲天堂日韩在线| 日本中文字幕精品| 欧美探花视频资源| 乱馆动漫1~6集在线观看|