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

深入理解并發(fā)編程藝術(shù)之計(jì)算機(jī)內(nèi)存模型

開發(fā) 前端
隨著計(jì)算機(jī)高速發(fā)展,CPU 技術(shù)遠(yuǎn)超過內(nèi)存技術(shù),所以多級(jí)緩存被使用,解決了內(nèi)存和 cpu 的讀寫速度問題,隨著多線程的發(fā)展,緩存一致性問題油然而生,好在可以通過緩存一致性協(xié)議來解決,比較出名的緩存一致性協(xié)議是MESI,MESI協(xié)議的引入,微微降低了 cpu 的速度。

了解java內(nèi)存模型不得不先了解計(jì)算機(jī)內(nèi)存模型,我們接下來就從計(jì)算內(nèi)存模型說起

計(jì)算機(jī)發(fā)展

我們都知道 CPU 和 內(nèi)存是計(jì)算機(jī)中比較核心的兩個(gè)東西,任何在計(jì)算機(jī)上運(yùn)行的程序其實(shí)都是對(duì)數(shù)據(jù)的存取和處理計(jì)算,最終都會(huì)映射成cpu和內(nèi)存之間的頻繁交互,最原始計(jì)算機(jī)就是cpu讀取內(nèi)存進(jìn)行處理,然后回寫內(nèi)存。

CPU在摩爾定律的指導(dǎo)下以每18個(gè)月翻一番的速度在發(fā)展,cpu的處理速度不斷增速,其處理速度遠(yuǎn)遠(yuǎn)超出了內(nèi)存的讀寫速度,導(dǎo)致的后果就是cpu大量的時(shí)間都花費(fèi)在磁盤 I/O、網(wǎng)絡(luò)通信或者數(shù)據(jù)庫(kù)訪問上,cpu大部分的時(shí)間都處于空閑的等待狀態(tài)。

為了充分壓榨cpu的性能,避免cpu性能浪費(fèi),就必須使用一些手段去把處理器的運(yùn)算能力“壓榨”出來,最容易想到的就是讓計(jì)算機(jī)同時(shí)處理幾項(xiàng)任務(wù)。為了實(shí)現(xiàn)這一目標(biāo),計(jì)算機(jī)系統(tǒng)不得不加入一層或多層讀寫速度盡可能接近處理器運(yùn)算速度的高速緩存(Cache)來作為內(nèi)存與處理器之間的緩沖:將運(yùn)算需要使用的數(shù)據(jù)復(fù)制到緩存中,讓運(yùn)算能快速進(jìn)行,當(dāng)運(yùn)算結(jié)束后再?gòu)木彺嫱交貎?nèi)存之中,這樣處理器就無須等待緩慢的內(nèi)存讀寫了。

圖片圖片

上圖為計(jì)算機(jī)多核cpu多級(jí)緩存圖,即當(dāng)下流行的cpu架構(gòu),計(jì)算機(jī)內(nèi)存模型主要涉及到的組件:處理器,寄存器,高速緩存,內(nèi)存,緩存行。

處理器:負(fù)責(zé)做邏輯運(yùn)算,程序代碼都會(huì)變成運(yùn)算指令或計(jì)算公式,在處理器里面其實(shí)就是二進(jìn)制的各種組合,處理器計(jì)算后會(huì)得到一個(gè)結(jié)果。

寄存器:離處理器最近的一塊存儲(chǔ)介質(zhì),可以說位于內(nèi)存模型的頂端,它的速度非常之快,快到可以和處理器相媲美,處理器從里面拿數(shù)據(jù),運(yùn)算完之后又把數(shù)據(jù)存回去。寄存器是處理器里面的一部分,處理器可能有多個(gè)寄存器,比如數(shù)據(jù)計(jì)數(shù)器,指令指針寄存器等等。

高速緩存:是一個(gè)比內(nèi)存速度快很多接近處理器速度的存儲(chǔ)區(qū)域,目的是把處理器要用到的一堆數(shù)據(jù)從主內(nèi)存中復(fù)制進(jìn)來供處理器使用,處理器運(yùn)算處理完了之后又把結(jié)果同步回主內(nèi)存,這樣處理器只做自己的事,而高速緩存就成了傳話筒。高速緩存有分為一級(jí)緩存,二級(jí)緩存和三級(jí)緩存,離處理器最近的是一級(jí)緩存,依次往后排。存儲(chǔ)器存儲(chǔ)空間大小:內(nèi)存>L3>L2>L1>寄存器存儲(chǔ)器速度快慢排序:寄存器>L1>L2>L3>內(nèi)存

緩存行:緩存是由最小的存儲(chǔ)區(qū)塊-緩存行(cacheline)組成,緩存行大小通常為64byte。緩存行是什么意思呢?比如你的L1緩存大小是512kb,而cacheline = 64byte,那么就是L1里有512 * 1024/64個(gè)cacheline,也是cpu中寄存器從緩存中取數(shù)據(jù)的最小單位,即取數(shù)為x=0,那么在緩存中找到x=0后不是只把x=0取走,而是把x=0所在的緩存行取走。

內(nèi)存:就是我們通常講的內(nèi)存,比如現(xiàn)在的電腦動(dòng)不動(dòng)8G,16G啊等等,在內(nèi)存模型中叫做主內(nèi)存,它比磁盤的讀寫速度快很多,但是又跟高速緩存沒法比,因此,程序啟動(dòng)的時(shí)候,程序相關(guān)的數(shù)據(jù)會(huì)加載到主內(nèi)存,然后處理器處理某塊邏輯的時(shí)候,比較占空間的東西會(huì)丟到主內(nèi)存,比如Java里面的對(duì)象,就是存放在堆上面的,而Java虛擬機(jī)里面的堆就是放在主內(nèi)存的。

在CPU訪問存儲(chǔ)設(shè)備時(shí)會(huì)遵循一定的原理,無論是存取數(shù)據(jù)抑或存取指令,都趨于聚集在一片連續(xù)的區(qū)域中,這就是局部性原理。這也是cpu架構(gòu)提高性能的一個(gè)關(guān)鍵性因素。

時(shí)間局部性(Temporal Locality):如果一個(gè)信息項(xiàng)正在被訪問,那么在近期它很可能還會(huì)被再次訪問。比如循環(huán)、遞歸、方法的反復(fù)調(diào)用等。

空間局部性(Spatial Locality):如果一個(gè)存儲(chǔ)器的位置被引用,那么將來他附近的位置也會(huì)被引用。比如順序執(zhí)行的代碼、連續(xù)創(chuàng)建的兩個(gè)對(duì)象、數(shù)組等。

帶有高速緩存的CPU執(zhí)行計(jì)算的流程:1.程序以及數(shù)據(jù)被加載到主內(nèi)存2.指令和數(shù)據(jù)被加載到CPU的高速緩存3.CPU執(zhí)行指令,把結(jié)果寫到高速緩存4.高速緩存中的數(shù)據(jù)寫回主內(nèi)存

講到這里我們知道以上新型cpu架構(gòu)是為充分壓榨cpu性能而來,那么就單看以上架構(gòu),在不做任何優(yōu)化的情況下,當(dāng)多核cpu并發(fā)工作的時(shí)候必然會(huì)引入緩存一致性問題。在多路處理器系統(tǒng)中,每個(gè)處理器都有自己的高速緩存,而它們又共享同一主內(nèi)存,當(dāng)多個(gè)處理器的運(yùn)算任務(wù)都涉及同一塊主內(nèi)存區(qū)域時(shí),將可能導(dǎo)致各自的緩存數(shù)據(jù)不一致。如果真的發(fā)生這種情況,那同步回到主內(nèi)存時(shí)該以誰的緩存數(shù)據(jù)為準(zhǔn)呢?例如:假設(shè)主內(nèi)存中存在一個(gè)共享變量 x,現(xiàn)在有 A 和 B 兩個(gè)內(nèi)核(也可以直接說分布在兩個(gè)核上的線程)分別對(duì)該變量 x=1 進(jìn)行操作,A/B 核各自高速緩存中存在共享變量副本 x。假設(shè)現(xiàn)在 A 想要修改 x 的值為 2,而 B 卻想要讀取 x 的值,那么 B 讀取到的值是 A 更新后的值 2,還是更新前的值 1 呢?答案是,不確定,即 B 有可能讀取到 A 更新前的值 1,也有可能讀取到 A 更新后的值 2,這是因?yàn)楦咚倬彺媸敲總€(gè)核私有的數(shù)據(jù)區(qū)域,而 A 在操作變量 x 時(shí),首先是將變量從主內(nèi)存拷貝到 A 的高速緩存中,然后對(duì)變量進(jìn)行操作,操作完成后再將變量 x 寫回主內(nèi)存,而對(duì)于 B 也是類似的,這樣就有可能造成主內(nèi)存與工作內(nèi)存間數(shù)據(jù)存在一致性問題,假如 A 修改完后正在將數(shù)據(jù)寫回主內(nèi)存,而 B 此時(shí)正在讀取主內(nèi)存,即將 x=1 拷貝到自己的工作高速緩存中,這樣 B 讀取到的值就是 x=1,但如果 A 已將 x=2 寫回主內(nèi)存后,B 才開始讀取的話,那么此時(shí) B 讀取到的就是 x=2,但到底是哪種情況先發(fā)生呢,在并發(fā)訪問過程中這些都是不確定的。

除了增加高速緩存之外,為了使處理器內(nèi)部的運(yùn)算單元能盡量被充分利用,處理器可能會(huì)對(duì)輸入代碼進(jìn)行亂序執(zhí)行優(yōu)化,處理器會(huì)在計(jì)算之后將亂序執(zhí)行的結(jié)果重組,保證該結(jié)果與順序執(zhí)行的結(jié)果是一致的,但并不保證程序中各個(gè)語句計(jì)算的先后順序與輸入代碼中的順序一致,因此如果存在一個(gè)計(jì)算任務(wù)依賴另外一個(gè)計(jì)算任務(wù)的中間結(jié)果,那么其順序性并不能靠代碼的先后順序來保證,顧名思義,當(dāng)單線程運(yùn)行的時(shí)候,無論怎樣亂序,最終的結(jié)果都是預(yù)期的結(jié)果,但是當(dāng)多線程的時(shí)候呢,就不一定了,特別是存在共享變量的或者說一個(gè)線程依賴于另一個(gè)線程的計(jì)算結(jié)果的時(shí)候,就很有可能因?yàn)閬y序帶來不正確的結(jié)果。

通過以上可以得知,cpu架構(gòu)自身存在數(shù)據(jù)一致性的問題和亂序重排問題,其實(shí)也可以理解為java的并發(fā)訪問的原子性問題,可見性問題,有序性問題。

計(jì)算機(jī)內(nèi)存模型

在多核cpu架構(gòu)中,每個(gè)核心都有自己的L1 L2高速緩存,同個(gè)cpu的多個(gè)核心共享L3緩存,不同cpu之間共享主內(nèi)存,為了保證共享內(nèi)存的正確性,內(nèi)存模型定義了共享內(nèi)存系統(tǒng)中多線程程序讀寫操作行為的規(guī)范。通過這些規(guī)則來規(guī)范對(duì)內(nèi)存的讀寫操作,從而保證指令執(zhí)行的正確性。它與處理器有關(guān)、與緩存有關(guān)、與并發(fā)有關(guān)、與編譯器也有關(guān)。他解決了 CPU 多級(jí)緩存、處理器優(yōu)化、指令重排等導(dǎo)致的內(nèi)存訪問問題,保證了并發(fā)場(chǎng)景下的一致性、原子性和有序性。

內(nèi)存模型解決并發(fā)問題主要采用兩種方式:1.限制處理器優(yōu)化2.使用內(nèi)存屏障

我們來看下內(nèi)存模型的具體做法

解決緩存不一致問題

解決緩存不一致的方法有很多,比如:總線加鎖(此方法性能較低,現(xiàn)在已經(jīng)不會(huì)再使用)MESI 協(xié)議:當(dāng)一個(gè) CPU 修改了 Cache 中的數(shù)據(jù),會(huì)通知其他緩存了這個(gè)數(shù)據(jù)的 CPU,其他 CPU 會(huì)把 Cache 中這份數(shù)據(jù)的 Cache Line 置為無效,要讀取數(shù)據(jù)的話,直接去內(nèi)存中獲取,不會(huì)再?gòu)?Cache 中獲取了。當(dāng)然還有其他的解決方案,MESI 協(xié)議是其中比較出名的。

MESI 協(xié)議中的狀態(tài)CPU 中每個(gè)緩存行使用的 4 種狀態(tài)進(jìn)行標(biāo)記(使用額外的兩位 bit 表示)

圖片圖片

  • M 和 E 的數(shù)據(jù)都是本 core 獨(dú)有的,不同之處是 M 狀態(tài)的數(shù)據(jù)是 dirty(和內(nèi)存中的不一致),E 狀態(tài)的數(shù)據(jù)是 clean(和內(nèi)存中的一致)
  • S 狀態(tài)是所有 Core 的數(shù)據(jù)都是共享的,只有 clean 的數(shù)據(jù)才能被多個(gè) core 共享
  • I-表示這個(gè) Cache line 無效

E 狀態(tài)只有 Core 0 訪問變量 x,它的 Cache line 狀態(tài)為 E(Exclusive)。

圖片圖片

S 狀態(tài)3 個(gè) Core 都訪問變量 x,它們對(duì)應(yīng)的 Cache line 為 S(Shared)狀態(tài)。

圖片圖片

M 狀態(tài)和I狀態(tài)之間的轉(zhuǎn)化Core 0 修改了 x 的值之后,這個(gè) Cache line 變成了 M(Modified)狀態(tài),其他 Core 對(duì)應(yīng)的 Cache line 變成了 I(Invalid)狀態(tài) 在 MESI 協(xié)議中,每個(gè) Cache 的 Cache 控制器不僅知道自己的讀寫操作,而且也監(jiān)聽(snoop)其它 Cache 的讀寫操作。每個(gè) Cache line 所處的狀態(tài)根據(jù)本核和其它核的讀寫操作在 4 個(gè)狀態(tài)間進(jìn)行遷移

圖片圖片

MESI 協(xié)議通過標(biāo)識(shí)緩存數(shù)據(jù)的狀態(tài),來決定 CPU 何時(shí)把緩存的數(shù)據(jù)寫入到內(nèi)存,何時(shí)從緩存讀取數(shù)據(jù),何時(shí)從內(nèi)存讀取數(shù)據(jù)。

MESI 協(xié)議看似解決了緩存的一致性問題,但是并不那么完美,因?yàn)楫?dāng)多個(gè)緩存對(duì)數(shù)據(jù)進(jìn)行了緩存時(shí),一個(gè)緩存對(duì)數(shù)據(jù)進(jìn)行修改需要同過指令的形式與其他 CPU 進(jìn)行通訊,這個(gè)過程是同步的,必須其他 CPU 都把緩存里的數(shù)據(jù)都置為 Invalid 狀態(tài)成功后,我們修改數(shù)據(jù)的 CPU 才能進(jìn)行下一步指令,整個(gè)過程中需要同步的和多個(gè)緩存通訊,這個(gè)過程是不穩(wěn)定的,容易產(chǎn)生問題,而且通訊的過程中 CPU 是必須處于等待的狀態(tài),那么也影響著 CPU 的性能。

為了避免這種 CPU 運(yùn)算能力的浪費(fèi),解決 CPU 切換狀態(tài)阻塞,Store Bufferes 被引入使用。處理器把它想要寫入到主存的值寫到緩存,然后繼續(xù)去處理其他事情。當(dāng)所有失效確認(rèn)都接收到時(shí),數(shù)據(jù)才會(huì)最終被提交。

指令重排問題

public class config{
    // 此變量必須定義為
 1   boolean initialized = false;
 2   public Object cache(@NotNull String key) {
 3       if (!initialized) {
 4           doSomethingWithConfig();
 5       }
 6       configText = readConfigFile("pz");
 7       processConfigOptions(configText, "xx");
 8       initialized = true;
 9       if (!initialized) {
 10           doSomethingWithConfig();
        }
    }  
}

拿上面的代碼來說明下亂序,簡(jiǎn)單來講就是initialized = false;cpu為了高效,避免再次去緩存取值,很有可能接著執(zhí)行initialized = true(判斷為無依賴關(guān)系的情況下),這個(gè)時(shí)候6、7行還沒有執(zhí)行,單線程情況下不會(huì)有問題,但是并發(fā)情況下就會(huì)有問題。下一篇我們?cè)敿?xì)講解。

指令重排序解決方案:硬件工程師其無法預(yù)知未知的程序邏輯場(chǎng)景,所以一些問題還是遺留給了軟件工程師,但是他們給我們提供了一套對(duì)應(yīng)場(chǎng)景的解決方案就是“內(nèi)存屏障指令”,我們的軟件工程師可以同內(nèi)存屏障來針對(duì)不同場(chǎng)景來選擇性的“禁用緩存”內(nèi)存屏障,又稱內(nèi)存柵欄,是一個(gè)CPU指令,硬件分為下面幾種:

lfence(讀屏障 load Barrier):在讀取指令前插入讀屏障,讓緩存中的數(shù)據(jù)失效,重新從主內(nèi)存加載數(shù)據(jù),保證數(shù)據(jù)是最新的。Sfence(寫屏障 store Barrier):在寫入指令后插入屏障,同步把緩存的數(shù)據(jù)寫回內(nèi)存,保證其數(shù)據(jù)立即對(duì)其他緩存可見。Mfence(全能屏障):擁有讀屏障和寫屏障的功能。Lock 前綴指令:Lock不是一種內(nèi)存屏障,但是它能完成類似內(nèi)存屏障的功能。Lock會(huì)對(duì)CPU總線和高速緩存加鎖,可以理解為CPU指令級(jí)的一種鎖。它后面可以跟ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, and XCHG等指令。

注意:不同的硬件緩存一致性協(xié)議和內(nèi)存屏障可能不同

總結(jié)

隨著計(jì)算機(jī)高速發(fā)展,CPU 技術(shù)遠(yuǎn)超過內(nèi)存技術(shù),所以多級(jí)緩存被使用,解決了內(nèi)存和 cpu 的讀寫速度問題,隨著多線程的發(fā)展,緩存一致性問題油然而生,好在可以通過緩存一致性協(xié)議來解決,比較出名的緩存一致性協(xié)議是MESI,MESI協(xié)議的引入,微微降低了 cpu 的速度。

為了更好的壓榨 cpu 的性能,于是Store Bufferes 概念被引入,將 cpu 寫入主存從同步阻塞變?yōu)楫惒剑蟠筇岣吡?cpu 執(zhí)行效率

指令重排序問題預(yù)期而至,這時(shí)候祭出終極武器:內(nèi)存屏障指令,在代碼里面禁用緩存。

至此,計(jì)算機(jī)發(fā)展中遇到的問題都一一解決,而這一系列問題解決方案,都是內(nèi)存模型規(guī)范的。

內(nèi)存模型就是為了解決計(jì)算機(jī)發(fā)展中遇到的緩存一致性、處理器優(yōu)化和指令重排、并發(fā)編程等問題的一系列規(guī)范,他定義了共享內(nèi)存系統(tǒng)中多線程程序讀寫操作行為的規(guī)范,通過這些規(guī)則來規(guī)范對(duì)內(nèi)存的讀寫操作,從而保證指令執(zhí)行的正確性。

責(zé)任編輯:武曉燕 來源: 碼農(nóng)本農(nóng)
相關(guān)推薦

2023-10-27 07:47:58

Java語言順序性

2023-11-05 12:05:35

JVM內(nèi)存

2020-12-11 07:32:45

編程ThreadLocalJava

2020-11-13 08:42:24

Synchronize

2022-10-12 07:53:46

并發(fā)編程同步工具

2022-03-30 15:25:28

鏈接過程計(jì)算機(jī)系統(tǒng)程序

2024-05-24 14:35:49

2024-12-31 09:00:12

Java線程狀態(tài)

2019-06-25 10:32:19

UDP編程通信

2015-03-24 13:28:52

Java Java Strin內(nèi)存模型

2022-06-22 08:02:11

CPU操作系統(tǒng)Java

2020-07-02 08:17:12

存儲(chǔ)IO

2021-07-26 07:47:37

無鎖編程CPU

2021-09-08 17:42:45

JVM內(nèi)存模型

2024-03-19 14:14:27

線程開發(fā)

2023-09-19 22:47:39

Java內(nèi)存

2013-06-20 10:25:56

2020-11-04 15:35:13

Golang內(nèi)存程序員

2020-06-01 21:07:33

C11C++11內(nèi)存

2025-09-08 07:14:25

點(diǎn)贊
收藏

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

国产精品女主播在线观看| 欧美午夜视频| 欧美美女黄视频| 性做爰过程免费播放| 色呦呦免费观看| 亚洲精一区二区三区| 国产小视频91| 在线观看一区二区三区四区| 色多多在线观看| 一区免费观看视频| 久久综合福利| aaa一区二区| 日韩精品亚洲专区| 欧美黑人极品猛少妇色xxxxx| 亚洲区免费视频| 秋霞影院一区| 欧洲在线/亚洲| 日韩黄色短视频| 在线观看免费版| 成人av电影在线| 成人xvideos免费视频| 国产成人亚洲欧洲在线| 91精品啪在线观看国产81旧版| 日韩电影中文字幕在线| 欧美性受xxxx黒人xyx性爽| 中文字幕色婷婷在线视频| 亚洲日本韩国一区| 日本精品免费| 亚洲人妻一区二区三区| 国产麻豆精品95视频| 国产精品白嫩美女在线观看 | 亚洲三区在线播放| 国产在线视视频有精品| 国产成人精品一区| 欧美三日本三级少妇99| 欧美日韩hd| 久久久精品2019中文字幕神马| 熟女高潮一区二区三区| 国产精品zjzjzj在线观看| 884aa四虎影成人精品一区| 亚洲视频在线观看一区二区三区| 女厕盗摄一区二区三区| 亚洲一区二区高清| 精品免费久久久久久久| 91黄色在线| 国产精品国产三级国产普通话三级| 日韩精品无码一区二区三区| 日本天堂影院在线视频| 99久久99精品久久久久久| 国产激情一区二区三区在线观看| 国产精品玖玖玖| 久久精品国产亚洲一区二区三区| 国产精品99久久久久久人 | 在线观看不卡视频| www黄色av| 亚洲欧洲高清| 在线视频综合导航| www.超碰com| 日韩色淫视频| 欧美日韩国产123区| 欧美成人福利在线观看| www999久久| 日韩欧美一卡二卡| 久久国产劲爆∧v内射| 国产无遮挡裸体免费久久| 亚洲第一精品福利| 搡老熟女老女人一区二区| 香蕉国产成人午夜av影院| 亚洲老板91色精品久久| 免费一级做a爰片久久毛片潮| 欧美日韩爱爱| 色噜噜国产精品视频一区二区| 女教师淫辱の教室蜜臀av软件| 久久精品青草| 欧美国产精品日韩| 九九热在线视频播放| 久久久久99| 国产日韩中文字幕| 99国产在线播放| 99久久久久久99| 色爱区成人综合网| av免费在线观| 欧美午夜视频一区二区| 无限资源日本好片| 57pao国产一区二区| 亚洲激情自拍图| 我不卡一区二区| 一个色综合网| 情事1991在线| 91免费视频播放| 成人av网站免费| 亚洲国产欧美日韩| 牛牛电影国产一区二区| 色狠狠色狠狠综合| 91蝌蚪视频在线| 天天操综合520| 久久视频在线观看免费| 欧美一级片免费在线观看| 美女免费视频一区二区| 国产精选在线观看91| av在线免费观看网站| 亚洲一区二区三区四区在线 | 国产suv精品一区二区883| 看欧美日韩国产| av免费看在线| 国产精品初高中害羞小美女文| 一区二区三区精品视频在线观看| 国精产品一区| 欧美特级黄色片| 在线免费观看a级片| 欧美视频在线观看视频| 超碰97网站| 国产91色在线播放| 日韩一区二区三区电影在线观看 | 色小子综合网| 久久久久久91| 中文字幕人成人乱码亚洲电影| 成人在线视频一区二区| 综合操久久久| 精品网站在线| 日韩国产中文字幕| 久热这里只有精品在线| 久久99久久久久| 日本高清一区| 中文在线8资源库| 精品国产乱码久久久久久免费| 成人黄色短视频| 久久一区国产| 久久另类ts人妖一区二区| 久久免费电影| 欧美大片在线观看一区二区| 国产激情无码一区二区三区| 青青国产91久久久久久| 免费国产在线精品一区二区三区| 丁香花高清在线观看完整版| 91精品国产91热久久久做人人| 国产综合精品久久久久成人av| 欧美亚洲专区| 免费av一区二区三区| av免费在线视| 亚洲国产免费av| 国产网站在线看| 成人黄色777网| 97免费视频观看| 一区二区三区国产好| 欧美二区乱c黑人| www.精品视频| 亚洲午夜激情av| 国产艳妇疯狂做爰视频| 影音先锋中文字幕一区二区| 俄罗斯精品一区二区三区| 在线视频国产区| 精品欧美一区二区久久| 久久精品视频久久| 成人激情动漫在线观看| 成年女人18级毛片毛片免费| 久久porn| 国产成人精品电影久久久| 美州a亚洲一视本频v色道| 色噜噜狠狠色综合中国| 国产视频三区四区| 久久综合综合久久综合| 米仓穗香在线观看| 2021年精品国产福利在线| 8050国产精品久久久久久| 九色在线免费| 欧美日韩国产在线观看| 日韩国产第一页| 国产91精品一区二区麻豆亚洲| 九九爱精品视频| 夜夜春成人影院| 国产精品一区二区久久| av中文字幕在线播放| 精品久久人人做人人爰| 久久一区二区三区视频| 国产午夜精品一区二区三区四区| 三上悠亚在线一区二区| 伊人情人综合网| 国产亚洲一区在线播放| 久久精品女人天堂av免费观看| 最新91在线视频| 好吊视频一区二区三区| 色综合天天性综合| 91精品少妇一区二区三区蜜桃臀| 国产一区二区三区黄视频 | 国产又粗又猛又爽又| 亚洲欧洲日产国码二区| 欧洲熟妇的性久久久久久| 丝袜美腿亚洲综合| 97精品国产97久久久久久粉红| 国产精品x8x8一区二区| 国产精品老女人视频| 日本无删减在线| 亚洲少妇激情视频| 国产黄色片网站| 欧洲另类一二三四区| 久久激情免费视频| 亚洲国产精品国自产拍av| 亚洲精品久久一区二区三区777| 人妖欧美一区二区| 精品少妇在线视频| 91久久夜色精品国产按摩| 国产日韩二区| 国产精品一区二区三区av| 日韩av成人在线| 青草在线视频| 日韩视频在线免费观看| 亚洲 欧美 自拍偷拍| 日韩欧美亚洲一区二区| 免费黄色av片| 天天色天天操综合| 国产精品国产精品88| 国产丝袜在线精品| 波多野结衣加勒比| 国产一区二区三区国产| 亚洲成人福利在线| 久久看片网站| 131美女爱做视频| 欧美va天堂在线| 中文字幕黄色大片| 欧美日韩高清| 欧美日本韩国国产| 卡通动漫精品一区二区三区| 999热视频在线观看| 婷婷丁香久久| 国产日韩专区在线| 国产成人a视频高清在线观看| 热re91久久精品国99热蜜臀| 国精产品一区一区三区mba下载| 日韩有码在线电影| 999在线视频| 国产一区二区激情| 免费av在线电影| 精品无人区太爽高潮在线播放 | 亚洲无限av看| 日本私人网站在线观看| 亚洲精品美女久久久| 人妻与黑人一区二区三区| 欧美精品一区二区三区在线播放 | 国产成人免费在线视频| 网站在线你懂的| 韩国三级中文字幕hd久久精品| 精品日韩久久久| 日韩精品视频网站| 在线观看的毛片| 另类小说一区二区三区| 亚洲第一中文av| 久久99国产精品久久99| 91小视频在线播放| 国产一区二区电影| 日韩欧美中文视频| 国产 日韩 欧美大片| 久久久男人的天堂| 成人a区在线观看| 影音先锋人妻啪啪av资源网站| 99精品国产视频| 美女又爽又黄视频毛茸茸| 91女厕偷拍女厕偷拍高清| 国产精品无码一区二区三区免费| 久久这里只有精品首页| 国产黄片一区二区三区| 欧美国产综合一区二区| 亚洲 欧美 变态 另类 综合| 亚洲激情第一区| 久久精品视频久久| 色天天综合久久久久综合片| 免费黄色一级大片| 欧美高清视频一二三区| 午夜精品久久久久久久91蜜桃| 欧美精品一区二区三区蜜臀| 天堂av中文在线资源库| 国产午夜精品免费一区二区三区| 91社区在线| 欧美激情精品久久久久久蜜臀| 成人一级福利| 国产日韩精品综合网站| 777久久精品| 日韩欧美一区二区在线观看| 91精品国产乱码久久久久久| 欧美一级视频免费看| 日韩福利电影在线| 男人添女人荫蒂国产| 久久综合精品国产一区二区三区| 俄罗斯毛片基地| 亚洲国产日韩综合久久精品| 欧美日韩 一区二区三区| 4438亚洲最大| 亚洲人视频在线观看| 日韩一区二区久久久| bbw在线视频| 成人黄色短视频在线观看| 国产主播性色av福利精品一区| 日韩视频精品| 国产在线欧美| www.com黄色片| 99久久精品免费看国产| 日韩免费av一区| 欧美日韩中文字幕在线视频| 国产美女无遮挡永久免费| 亚洲精品午夜精品| 91小视频xxxx网站在线| 国产精品a久久久久久| 97一区二区国产好的精华液| 色姑娘综合av| 99国产精品私拍| 乳色吐息在线观看| 中文字幕欧美激情一区| 国产一区二区三区影院| 欧美一区二区三区免费在线看| 可以在线观看的黄色| 久久久久久久国产| 欧美成人一二区| 日韩和欧美的一区二区| 日韩亚洲国产欧美| 杨幂一区二区国产精品| 亚洲国产精品成人久久综合一区 | 亚洲高清网站| 亚洲图片 自拍偷拍| 亚洲国产精品成人综合| 亚洲欧美偷拍一区| 亚洲精美色品网站| 啦啦啦中文在线观看日本| 成人久久久久久久| 日韩成人影院| 欧美丰满熟妇xxxxx| 久久综合久久综合久久综合| 久青草视频在线观看| 日韩精品一区二区三区四区| 久久国产精品一区| 国产精品午夜一区二区欲梦| 欧美精品乱码| 蜜臀久久99精品久久久酒店新书| 成人高清视频在线观看| 国产一级一片免费播放| 日韩一区二区在线看| wwwav在线| 91日本在线视频| 亚洲精品一区二区在线看| 日韩在线一区视频| 亚洲国产激情av| 中文字幕在线观看你懂的| 夜夜躁日日躁狠狠久久88av| 日韩一区二区三区在线免费观看 | 日本道精品一区二区三区| 欧美拍拍视频| 国产精品都在这里| 成人无号精品一区二区三区| 超碰超碰在线观看| 亚洲欧洲日韩在线| 国产三级第一页| 欧美巨大黑人极品精男| 91精品入口| 国产3p露脸普通话对白| 91在线porny国产在线看| 中日韩黄色大片| 亚洲欧美色图片| jizzyou欧美16| 二级片在线观看| 国产福利91精品一区| 四虎成人精品永久免费av| 亚洲韩国日本中文字幕| 日韩三级影视| 宅男av一区二区三区| 国产精品亚洲综合一区在线观看| 久久无码精品丰满人妻| 日韩国产欧美精品一区二区三区| se01亚洲视频| 亚洲欧美日韩综合一区| 国产精品18久久久久久久久| 国产在线视频在线观看| 国产丝袜一区视频在线观看| 久久免费资源| 久久综合亚洲精品| 91首页免费视频| 中文字幕福利视频| 欧美肥婆姓交大片| 亚洲国产精品嫩草影院久久av| www.com黄色片| 亚洲妇女屁股眼交7| 国产精品一区二区三区四区色| 亚洲va久久久噜噜噜久久天堂| 欧美午夜精品| 国产视频三区四区| 精品人伦一区二区色婷婷| 姬川优奈av一区二区在线电影| 三上悠亚免费在线观看| 99re这里都是精品| 伊人影院中文字幕| 欧美激情免费观看| 欧美一区2区| 伦理片一区二区| 欧美剧情片在线观看| 午夜不卡影院| 国产午夜精品视频一区二区三区| 91免费国产在线| 国产青青草视频| 国产精品999| 亚洲高清不卡| 91在线播放观看| 在线不卡国产精品|