精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

成人做爰69片免费| 裸体裸乳免费看| 一区二区三区在线观看av| 日韩av影院| 欧美色国产精品| eeuss中文| 五月婷婷六月丁香| 久久国产主播| 久久91精品国产91久久跳| 欧美极品美女电影一区| 亚洲成年网站在线观看| 日韩在线国产| 亚洲av综合色区无码一区爱av| 国产偷自视频区视频一区二区| 中文字幕在线视频日韩| 欧产日产国产精品98| 91超碰碰碰碰久久久久久综合| 国产精品国产成人国产三级| 国产嫩草一区二区三区在线观看| 伊人精品在线视频| 欧美亚洲免费| 久久999免费视频| 日本人亚洲人jjzzjjz| 成人香蕉社区| 9191精品国产综合久久久久久| 日韩在线综合网| 在线三级中文| 中文字幕一区二区三区蜜月| 欧美少妇一区| 亚洲欧美一区二区三| 国产精品18久久久久久久网站| 国产精品久久久久久久久久新婚| jizz国产免费| 激情综合电影网| 美日韩在线视频| 娇小11一12╳yⅹ╳毛片| 久草成人在线| 亚洲精品成人免费| aaa黄色大片| 日本亚州欧洲精品不卡| 制服丝袜国产精品| 色www免费视频| 成人国产精品| 欧美视频一二三区| 韩国一区二区av| xxxxxx欧美| 精品久久久久久久久久ntr影视| 欧洲金发美女大战黑人| www视频在线看| 亚洲日本电影在线| 亚洲美女自拍偷拍| 麻豆91在线| 日韩一区日韩二区| 亚洲欧洲久久| 日本中文字幕在线2020| 国产精品久久国产精麻豆99网站| 亚洲午夜久久久影院伊人| av资源网站在线观看| 欧美高清在线精品一区| 亚洲一卡二卡三卡| 超碰在线免费播放| 亚洲在线一区二区三区| 成人免费性视频| 国产精品蜜臀| 天天综合日日夜夜精品| wwwxxx黄色片| jizz久久久久久| 日本韩国欧美在线| 男女视频在线看| 国产精品麻豆| 精品国内片67194| 欧美肉大捧一进一出免费视频 | 欧美日韩综合视频| 又大又硬又爽免费视频| 在线男人天堂| 欧美日韩一区二区三区免费看| 在线观看日本一区二区| 日韩在线亚洲| 亚洲国产精品成人av| 日本黄色特级片| 日韩精品水蜜桃| 欧美日韩xxx| 国产又大又黄又粗| 老司机精品视频在线| 99国产超薄肉色丝袜交足的后果 | 日韩久久一区| 欧美成人aa大片| 婷婷色一区二区三区| 仙踪林久久久久久久999| 欧美黑人xxx| 伊人中文字幕在线观看| 狠狠色丁香婷婷综合久久片| 国产欧美日韩一区二区三区| 国产视频网站在线| 一区二区高清视频在线观看| 能在线观看的av网站| 精品国产不卡一区二区| 国产视频一区在线| 日本妇女毛茸茸| 肉肉av福利一精品导航| 成人高清在线观看| av二区在线| 五月开心婷婷久久| www,av在线| 夜色77av精品影院| 久久久久久噜噜噜久久久精品| 国产亚洲欧美日韩高清| 成人免费视频播放| 亚洲人成网站在线播放2019| 日韩欧美一中文字暮专区| 欧美日产在线观看| 人人妻人人藻人人爽欧美一区| 欧美系列电影免费观看| 26uuu亚洲伊人春色| 精品国产一级片| 国产精品久久久久久久久免费丝袜 | 天天躁日日躁狠狠躁喷水| 国产精品免费久久| 国产熟女高潮视频| 国产色噜噜噜91在线精品| 久久婷婷国产麻豆91天堂| 色av性av丰满av| www.亚洲色图| www.国产在线播放| 欧美三级一区| 日韩中文字幕免费| 波多野结衣一区二区三区四区| www.亚洲色图| 丝袜人妻一区二区三区| 麻豆视频久久| 久久夜色精品国产亚洲aⅴ| 波多野结衣视频免费观看| 91丨国产丨九色丨pron| 国产日韩av网站| 88久久精品| 欧美交受高潮1| 亚洲第一天堂在线观看| 亚洲免费成人av| 国产美女视频免费看| japanese国产精品| 国产成人综合亚洲| 国产区av在线| 欧美三级中文字幕在线观看| 男人的天堂av网| 日本成人中文字幕在线视频| 日韩成人在线资源| 97成人超碰| 久久精品91久久久久久再现| 国产免费久久久| 一区二区三区免费网站| 国产伦理在线观看| 精品二区视频| 国产一区二区在线观看免费播放| 国产在线看片免费视频在线观看| 亚洲激情自拍图| 青青草av在线播放| 2022国产精品视频| 日日碰狠狠丁香久燥| 青青草国产成人a∨下载安卓| 国产精品久久久久福利| 秋霞午夜理伦电影在线观看| 欧美一区在线视频| 精品少妇久久久久久888优播| 成人av资源站| 免费日韩视频在线观看| 成人影院天天5g天天爽无毒影院 | 8848成人影院| 国产91av在线| 2017亚洲天堂1024| 日韩欧美一级二级三级久久久| 劲爆欧美第一页| 91美女精品福利| 欧美婷婷精品激情| 欧美伊人久久| 久久99国产精品99久久| 国产精品久久亚洲不卡| 欧美精品在线第一页| 天天操天天干天天| 91福利在线看| 久久综合久久鬼| 久久精品一区二区三区av| 激情文学亚洲色图| 亚洲免费网址| 中文字幕一区二区三区四区五区 | 久久网免费视频| 91免费观看视频在线| 国产美女视频免费看| 亚洲人人精品| 亚洲午夜在线观看| 日本中文字幕在线一区| 成人福利网站在线观看11| 丰满大乳少妇在线观看网站| 在线视频亚洲欧美| 亚洲免费国产视频| 欧美日韩国产精品成人| 日韩成年人视频| 中文字幕在线播放不卡一区| 色哟哟无码精品一区二区三区| 日本欧美一区二区| www.avtt| 亚洲一区二区日韩| 欧美重口乱码一区二区| 一区二区三区在线免费看 | 欧美激情在线看| 91精品人妻一区二区三区蜜桃2| 日本中文字幕一区| 精品国产一区三区| 午夜精品亚洲| 亚洲一区二区三区色| 天堂网av成人| 国产91视觉| 亚洲伦理久久| 国产精品成人在线| 天堂资源在线| 久久久久久久久91| 中文字幕免费高清电视剧网站在线观看| 亚洲天堂男人的天堂| 手机在线观看免费av| 91精品麻豆日日躁夜夜躁| 欧美男人天堂网| 大荫蒂欧美视频另类xxxx| 婷婷色中文字幕| 国产精品三级av| 蜜桃无码一区二区三区| 91香蕉国产在线观看软件| 久久久久亚洲av无码网站| 久久97超碰色| 在线看的黄色网址| 老司机精品久久| 免费黄色日本网站| 一区二区国产精品| 国自产拍偷拍精品啪啪一区二区| 黄色成人91| 18禁裸男晨勃露j毛免费观看 | 欧美极品少妇全裸体| 国产在线高潮| 不卡av电影在线观看| 黄色免费网站在线| 久久九九免费视频| 麻豆网站在线| 久久国产精品久久国产精品| 美女隐私在线观看| 久久av在线看| 亚洲区欧洲区| 欧美交受高潮1| 成入视频在线观看| 欧美亚洲成人精品| 美女18一级毛片一品久道久久综合| 91精品国产高清久久久久久91 | 日韩欧美在线视频免费观看| 国产精品乱子伦| 一本在线高清不卡dvd| 台湾佬中文在线| 在线观看日韩高清av| 伊人网免费视频| 欧美一区二区久久| 丰满人妻熟女aⅴ一区| 亚洲福利在线观看| 精华区一区二区三区| 综合国产在线视频| 国产精品久久麻豆| 久久久久久久久久久亚洲| 成人国产电影在线观看| 日韩av电影手机在线| 国产福利亚洲| 亚洲影影院av| 欧美午夜寂寞| 一本色道久久99精品综合| 亚洲欧洲美洲一区二区三区| 免费看欧美一级片| 欧美专区18| 久久人人爽av| 成人av午夜电影| 自拍偷拍99| 在线免费看黄色片| www.国产三级| 欧美深夜视频| 国产精品久久久久久网站| 91精品视频免费在线观看| 一个色在线综合| 国产成人在线免费观看视频| 色婷婷久久久久swag精品| 亚洲手机在线观看| 精品少妇一区二区三区在线播放 | 另类调教123区| 极品粉嫩美女露脸啪啪| 成人污污视频在线观看| 欧美特级黄色录像| 一区二区三区在线影院| 黑人精品无码一区二区三区AV| 欧美美女bb生活片| 欧美一级淫片aaaaaa| 色妞色视频一区二区三区四区| 国产天堂在线播放视频| 国产精品久久久久久久久久| 高清日韩欧美| 亚洲在线欧美| 一区二区毛片| 亚洲精品久久久久久| 久久久久久久久久久久久女国产乱| 高h视频免费观看| 色婷婷激情一区二区三区| www.国产黄色| www亚洲精品| 欧美gay囗交囗交| 国产传媒一区二区三区| 日韩av在线中文字幕| 99精品在线免费视频| 国产精品一区二区三区99| 日韩女同一区二区三区| 亚洲国产精品精华液网站| 91精品视频免费在线观看| 亚洲欧美在线看| 波多野一区二区| 91在线看网站| 91精品一区二区三区综合| 韩国一区二区av| 91麻豆蜜桃一区二区三区| 免费在线观看亚洲| 538在线一区二区精品国产| 国产高清视频免费最新在线| 97在线日本国产| 亚洲国产欧美国产第一区| 欧美 另类 交| 麻豆国产91在线播放| 亚洲成人网在线播放| 天天综合日日夜夜精品| 亚洲精品视频91| 久久91亚洲人成电影网站| www.91精品| 中文字幕在线亚洲精品| 日本91福利区| 国产一级久久久久毛片精品| 日韩欧美在线网址| 水莓100在线视频| 91成人免费观看网站| 国产精品videossex| 国产 国语对白 露脸| 韩国av一区二区三区在线观看| 女人黄色一级片| 欧美中文字幕一区二区三区亚洲| 九色视频网站在线观看| 庆余年2免费日韩剧观看大牛| 国内自拍欧美| 国产老熟妇精品观看| 99精品1区2区| 亚洲 欧美 成人| 亚洲欧美国产另类| 成人日韩在线| 午夜午夜精品一区二区三区文| 日韩福利视频导航| 国产精品久久国产精麻豆96堂| 欧美日韩高清一区二区不卡| 麻豆传媒在线观看| 91久色国产| 亚洲第一黄网| 欧美图片一区二区| 在线免费观看一区| 日本免费在线视频| 91嫩草国产在线观看| 99国产精品99久久久久久粉嫩| 中文幕无线码中文字蜜桃| 欧美在线你懂的| 黄色的网站在线观看| 俄罗斯精品一区二区| 99精品福利视频| 无码少妇精品一区二区免费动态| 欧美日韩中文国产| 26uuu亚洲电影在线观看| 成人免费看片网址| 性欧美xxxx大乳国产app| 99国产精品无码| 欧美成人乱码一区二区三区| 欧美久久天堂| 中文字幕成人一区| 成人永久aaa| 国产精品xxxxxx| 欧美成aaa人片在线观看蜜臀| 第四色在线一区二区| 国产第一页视频| 亚洲欧美激情插 | 91在线视频免费91| 天天干天天插天天射| 久久综合久久美利坚合众国| 国产一区二区在线视频你懂的| 99久久久无码国产精品6| 国产精品福利在线播放| 黄色av中文字幕| 国产精品久久久久久久久久东京| 欧美日韩国产一区精品一区| 国产精品20p| 精品久久人人做人人爰| 精品成人av| 美女黄色免费看| 欧美精彩视频一区二区三区| www日本在线| 国产精品成人一区二区三区吃奶 | 韩国中文字幕av| 亚洲午夜免费视频| 调教视频免费在线观看|