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

Go語言出現后,Java還是好選擇嗎?

新聞 前端
隨著大量新生的異步框架和支持協程的語言(如Go)的出現,在很多場景下操作系統的線程調度成為了性能的瓶頸,Java也因此被質疑是否不再適應最新的云場景了。

隨著大量新生的異步框架和支持協程的語言(如Go)的出現,在很多場景下操作系統的線程調度成為了性能的瓶頸,Java也因此被質疑是否不再適應最新的云場景了。4年前,阿里JVM團隊開始自研Wisp2,將Go語言的協程能力帶入到Java世界。既享受Java的豐富生態,又獲得異步程序的性能,Wisp2讓Java平臺歷久彌新。

Java平臺一直以生態的繁榮著稱,大量的類庫、框架幫助開發者們快速搭建應用。而其中大部分Java框架類庫都是基于線程池以及阻塞機制來服務并發的,主要原因包括:

1. Java語言在核心類庫中提供了強大的并發能力,多線程應用可以獲得不俗的性能;

2. Java EE的一些標準都是線程級阻塞的(比如JDBC);

3. 基于阻塞模式可以快速地開發應用。

但如今,大量新生的異步框架和支持協程的語言(如Go)的出現,在很多場景下操作系統的線程調度成為了性能的瓶頸。Java也因此被質疑是否不再適應最新的云場景了。

4年前,阿里開始自研Wisp2。它主要是用在IO密集的服務器場景,大部分公司的在線服務都是這樣的場景  (離線應用都是偏向于計算,則不適用)。它在功能屬性上對標Goroutine的Java協程,在產品形態、性能、穩定性上都達到了一個比較理想的情況。到現在,已經有上百個應用,數萬個容器上線了Wisp1/2。Wisp協程完全兼容多線程阻塞的代碼寫法,僅需增加JVM參數來開啟協程,阿里巴巴的核心電商應用已經在協程模型上經過兩個雙十一的考驗,既享受到了Java的豐富生態,又獲得了異步程序的性能。

Wisp2主打的是性能和對現有代碼的兼容性,簡而言之,現有的基于多線程的IO密集的Java應用只需要加上Wisp2的JVM參數就可以獲得異步的性能提升。

作為例子,以下是消息中間件代理(簡稱mq)和drds只添加參數不改代碼的壓測比較: 

Go语言出现后,Java还是最佳选择吗?

可以看到上下文切換以及sys CPU顯著降低,RT減少、QPS分別提升11.45%,18.13%。

Quick Start

由于Wisp2完全兼容現有的Java代碼,因此使用起來十分簡單,有多簡單?

如果你的應用是“標準”的在線應用(使用/home/admin/$APP_NAME/setenv.sh配置參數),那么在admin用戶下輸入如下命令就可以開啟Wisp2了:

curl https://gosling.alibaba-inc.com/sh/enable-wisp2.sh | sh

否則需要手動升級JDK和Java參數:

ajdk 8.7.12_fp2 rpm

sudo yum install ajdk -b current # 也可以通過yum安裝最新jdk
java -XX:+UseWisp2 .... # 使用Wisp參數啟動Java應用

然后就可以通過jstack驗證協程確實被開啟了。

Carrier線程是調度協程的線程,下方的- Coroutine [...]表示一個協程,active表示協程被調度的次數,steal表示被work stealing的次數,preempt表示時間片搶占次數。

Go语言出现后,Java还是最佳选择吗?

下圖是DRDS在ecs上壓測時的top -H,可以看出來應用的數百個線程被8個Carrier線程托管,均勻地跑在CPU核數個線程上面。下方一些名為java的線程是gc線程。

Go语言出现后,Java还是最佳选择吗?

過多線程的開銷

誤區1: 進內核引發上下文切換

我們看一段測試程序:

  1. pipe(a);  
  2. while (1) {  
  3.   write(a[1], a, 1);  
  4.   read(a[0], a, 1);  
  5.   n += 2;  
  6. }  

Go语言出现后,Java还是最佳选择吗?

執行這段程序時上下文切換非常低,實際上上面的IO系統調用都是不會阻塞的,因此內核不需要掛起線程,也不需要切換上下文,實際發生的是用戶/內核態的模式切換。

上面的程序在神龍服務器測得每個pipe操作耗時約334ns,速度很快。

誤區2: 上下文切換的開銷很大

本質上來說無論是用戶態還是內核態的上下文切換都是很輕量的,甚至有一些硬件指令來支持,比如pusha可以幫助我們保存通用寄存器。同一個進程的線程共享頁表,因此上下文切換的開銷一般只有:

  • 保存各種寄存器
  • 切換sp(call指令會自動將pc壓棧)

可以在數十條指令內完成。

開銷

既然近內核以及上下文切換都不慢,那么多線程的開銷究竟在哪?

我們不妨看一個阻塞的系統調用futex的熱點分布:

Go语言出现后,Java还是最佳选择吗?

可以看到上面的熱點中有大量涉及調度的開銷。我們來看過程:

  1. 調用系統調用(可能需要阻塞);
  2. 系統調用確實需要阻塞,kernel需要決定下一個被執行的線程(調度);
  3. 執行上下切換。

因此,上面2個誤區與多線程的開銷都有一定因果關系,但是真正的開銷來源于線程阻塞喚醒調度。

綜上,希望通過線程模型來提升web server性能的原則是:

  1. 活躍線程數約等于CPU個數
  2. 每個線程不太需要阻塞

文章后續將緊緊圍繞這兩個主題。

為了滿足上述兩個條件,使用eventloop+異步callback的方式是一個極佳的選擇。

異步與協程的關系

為了保持簡潔,我們以一個異步服務器上的Netty寫操作為例子(寫操作也存在阻塞的可能):

  1. private void writeQuery(Channel ch) { 
  2.   ch.write(Unpooled.wrappedBuffer("query".getBytes())).sync(); 
  3.   logger.info("write finish"); 

這里的sync()會阻塞線程。不滿足期望。由于netty本身是一個異步框架,我們引入回調:

  1. private void writeQuery(Channel ch) { 
  2.   ch.write(Unpooled.wrappedBuffer("query".getBytes())) 
  3.     .addListener(f -> { 
  4.       logger.info("write finish"); 
  5.     }); 

注意這里異步的write調用后,writeQuery會返回。因此假如邏輯上要求在write后執行的代碼,必須出現在回調里,write是函數的最后一行。這里是最簡單的情形,如果函數有其他調用者,那么就需要用CPS變換。

需要不斷的提取程序的"下半部分",即continuation,似乎對我們造成一些心智負擔了。這里我們引入kotlin協程幫助我們簡化程序:

  1. suspend fun Channel.aWrite(msg: Any): Int = 
  2.     suspendCoroutine { cont -> 
  3.         write(msg).addListener { cont.resume(0) } 
  4.     } 
  5.  
  6. suspend fun writeQuery(ch: Channel) { 
  7.     ch.aWrite(Unpooled.wrappedBuffer("query".toByteArray())) 
  8.     logger.info("write finish"

這里引入了一個魔法suspendCoroutine,我們可以獲得當前Continuation的引用,并執行一段代碼,最后掛起當前協程。Continuation代表了當前計算的延續,通過Continuation.resume()我們可以恢復執行上下文。因此只需在寫操作完成時回調cont.resume(0),我們又回到了suspendCoroutine處的執行狀態(包括caller writeQuery),程序繼續執行,代碼返回,執行log。從writeQuery看我們用同步的寫法完成了異步操作。當協程被suspendCoroutine切換走后,線程可以繼續調度其他可以執行的協程來執行,因此不會真正阻塞,我們因此獲得了性能提升。

從這里看,只需要我們有一個機制來保存/恢復執行上下文,并且在阻塞庫函數里采用非阻塞+回調的方式讓出/恢復協程,就可以使得以同步形式編寫的程序達到和異步同樣的效果了。

理論上只要有一個庫包裝了所有JDK阻塞方法,我們就可以暢快地編寫異步程序了。改寫的阻塞庫函數本身需要足夠地通用流行,才能被大部分程序使用起來。據我所知,vert.x的kotlin支持已經做了這樣的封裝。

雖然vert.x很流行,但是無法兼顧遺留代碼以及代碼中的鎖阻塞等邏輯。因此不能算是最通用的選擇。實際上Java程序有一個繞不過的庫——JDK。Wisp就是在JDK里所有的阻塞調用出進行了非阻塞+事件恢復協程的方式支持了協程調度,在為用戶帶來最大便利的同時,兼顧了現有代碼的兼容性。

上述方式支持了,每個線程不太需要阻塞,Wisp在Thread.start()處,將線程轉成成了協程,來達到了另一目的: 活躍線程數約等于CPU個數。因此只需要使用Wisp協程,所有現有的Java多線程代碼都可以獲得異步的性能。

手工異步/Wisp性能比較

對于基于傳統的編程模型的應用,考慮到邏輯清晰性、異常處理的便利性、現有庫的兼容性,改造成異步成本巨大。使用Wisp相較于異步編程優勢明顯。

下面我們在只考慮性能的新應用的前提下分析技術的選擇。

基于現有組件寫新應用

如果要新寫一個應用我們通常會依賴JDBC、Dubbo、Jedis這樣的常用協議/組件,假如庫的內部使用了阻塞形式,并且沒有暴露回調接口,那么我們就沒法基于這些庫來寫異步應用了(除非包裝線程池,但是本末倒置了)。下面假設我們依賴的所有庫都有回調支持,比如dubbo。

1)假設我們使用Netty接受請求,我們稱之為入口eventLoop,收到請求可以在Netty的handler里處理,也可以為了io的實時性使用業務線程池。

2)假設請求處理期間需要調用dubbo,因為dubbo不是我們寫的,因此內部有自己的Netty Eventloop,于是我們向dubbo內部的Netty eventLoop處理IO,等待后端響應后回調。

3)dubbo eventLoop收到響應后在eventloop或者callback線程池調用callback。

4)后續邏輯可以在callback線程池或者原業務線程池繼續處理。

5)為了完成對客戶端的響應最終總是要由入口的eventloop來寫回響應。

我們可以看到由于這種封裝導致的eventLoop的割裂,即便完全使用回調的形式,我們處理請求時多多少少要在多個eventLoop/線程池之間傳遞,而每個線程又都沒法跑到一個較滿的程度,導致頻繁地進入os調度。與上述的每個線程不太需要阻塞原則相違背。因此雖然減少了線程數,節約了內存,但是我們得到的性能收益變得很有限。

完全從零開始開發

對于一個功能有限的新應用(比如nginx只支持http和mail協議)來說我們可以不依賴現有的組件來重新寫應用。比如我們可以基于Netty寫一個數據庫代理服務器,與客戶端的連接以及與真正后端數據庫的連接共享同一個eventloop。

這樣精確控制線程模型的應用通常可以獲得很好的性能,通常性能是可以高于通過非異步程序轉協程的,原因如下:

  • 線程控制更加精確:舉個例子,比如我們可以控制代理的客戶端和后端連接都綁定在同一個netty線程,所有的操作都可以threadLocal化
  • 沒有協程的runtime和調度開銷(1%左右)

但是使用協程依舊有一個優勢:對于jdk中無處不在的synchronized塊,wisp可以正確地切換調度。

適應的Workload

基于上述的背景,我們已經知道Wisp或者其他各種協程是適用于IO密集Java程序設計的。否則線程沒有任何切換,只需要盡情地在CPU上跑,OS也不需要過多的干預,這是比較偏向于離線或者科學計算的場景。

在線應用通常需要訪問RPC、DB、cache、消息,并且是阻塞的,十分適合使用Wisp來提升性能。

最早的Wisp1也是對這些場景進行了深度定制,比如hsf接受的請求處理是會自動用協程取代線程池,將IO線程數量設置成1個后使用epoll_wait(1ms)來代替selector.wakeup(),等等。因此我們經常受到的一個挑戰是Wisp是否只適合阿里內部的workload?

  • 對于Wisp1是這樣的,接入的應用的參數以及Wisp的實現做了深度的適配。
  • 對于Wisp2,會將所有線程轉換成協程,已經無需任何適配了。

為了證明這一點,我們使用了web領域最權威的techempower benchmak集來驗證,我們選擇了com.sun.net.httpserver、Servlet等常見的阻塞型的測試(性能不是最好,但是最貼近普通用戶,同時具備一定的提升空間)來驗證Wisp2在常見開源組件下的性能,可以看到在高壓力下qps/RT會有10%~20%的優化。

Project Loom

Project Loom作為OpenJDK上的標準協程實現很值得關注,作為java開發者我們是否應該擁抱Loom呢?

我們首先對Wisp和Loom這里進行一些比較:

1)Loom使用序列化的方式保存上下文,更省內存,但是切換效率低。

2)Wisp采用獨立棧的方式,這點和go類似。協程切換只需切換寄存器,效率高但是耗內存。

3)Loom不支持ObectMonitor,Wisp支持。

  • synchronized/Object.wait()將占用線程,無法充分利用CPU。
  • 還可能產生死鎖,以Wisp的經驗來說是一定會產生死鎖(Wisp也是后來陸續支持ObectMonitor的)。

4)Wisp支持在棧上有native函數時切換(反射等等),Loom不支持。

  • 對dubbo這樣的框架不友好,棧底下幾乎都帶有反射。

總根據我們的判斷,Loom至少還要2年時間才能到達一個穩定并且功能完善的狀態。Wisp的性能優秀,功能要完整很多,產品本身也要成熟很多。Loom作為Oracle項目很有機會進入Java標準,我們也在積極地參與社區,希望能將Wisp的一些功能實現貢獻進社區。

同時Wisp目前完全兼容Loom的Fiber API,假如我們的用戶基于Fiber API來編程,我們可以保證代碼的行為在Loom和Wisp上表現完全一致。

FAQ

協程也有調度,為什么開銷小?

我們一直強調了協程適用于IO密集的場景,這就意味了通常任務執行一小段時間就會阻塞等待IO,隨后進行調度。這種情況下只要系統的CPU沒有完全打滿,使用簡單的先進先出調度策略基本都能保證一個比較公平的調度。同時,我們使用了完全無鎖的調度實現,使得調度開銷相對內核大大減少。

Wisp2為什么不使用ForkJoinPool來調度協程?

ForkJoinPool本身十分優秀,但是不太適合Wisp2的場景。

為了便于理解,我們可以將一次協程喚醒看到做一個Executor.execute()操作,ForkJoinPool雖然支持任務竊取,但是execute()操作是隨機或者本線程隊列操作(取決于是否異步模式)的,這將導致協程在哪個線程被喚醒的行為也很隨機。

在Wisp底層,一次steal的代價是有點大的,因此我們需要一個affinity,讓協程盡量保持綁定在固定線程,只有線程忙的情況下才發生workstealing。我們實現了自己的workStealingPool來支持這個特性。從調度開銷/延遲等各項指標來看,基本能和ForkJoinPool打平。

還有一個方面是為了支持類似go的M和P機制,我們需要將被協程阻塞的線程踢出調度器,這些功能都不適宜改在ForkJoinPool里。

如何看待Reactive編程?

Reactive編程模型已經被業界廣泛接受,是一種重要的技術方向;同時Java代碼里的阻塞也很難完全避免。我們認為協程可以作為一種底層worker機制來支持Reactive編程,即保留了Reactive編程模型,也不用太擔心用戶代碼的阻塞導致了整個系統阻塞。

這里是Ron Pressler最近的一次演講,作為Quasar和Loom的作者,他的觀點鮮明地指出了回調模型會給目前的編程帶來很多挑戰 。

Wisp經歷了4年的研發,我將其分為幾個階段:

1)Wisp1,不支持objectMonitor、并行類加載,可以跑一些簡單應用;

2)Wisp1,支持了objectMonitor,上線電商核心,不支持workStealing,導致只能將一些短任務轉為協程(否則workload不均勻),netty線程依舊是線程,需要一些復雜且trick的配置;

3)Wisp2,支持了workStealing,因此可以將所有線程轉成協程,上述netty問題也不再存在了。

目前主要的限制是什么?

目前主要的限制是不能有阻塞的JNI調用,wisp是通過在JDK中插入hook來實現阻塞前調度的,如果是用戶自定義的JNI則沒有機會hook。

最常見的場景就是使用了Netty的EpollEventLoop:

1)螞蟻的bolt組件默認開啟了這個特點,可以通過-Dbolt.netty.epoll.switch=false 來關閉,對性能的影響不大。

2)也可以使用-Dio.netty.noUnsafe=true , 其他unsafe功能可能會受影響。

3)(推薦) 對于netty 4.1.25以上,支持了通過-Dio.netty.transport.noNative=true 來僅關閉jni epoll,參見358249e5

 

 

 

 

 

 

責任編輯:張燕妮 來源: 阿里技術
相關推薦

2019-11-01 10:27:48

GoJava語言

2020-08-07 07:39:19

編程語言JavaPython

2022-09-16 07:40:17

CloudWeGo開源Rust

2012-06-14 10:06:43

創業動態語言靜態語言

2013-01-15 10:50:42

2019-11-12 14:34:07

大數據MATLAB算法

2016-09-27 21:25:08

Go語言Ken Thompso

2018-09-26 14:17:00

編程語言JavaPython

2018-10-09 15:26:19

JavaPython語言

2012-06-26 10:08:56

云計算大數據

2019-10-17 09:00:00

GoRust編程語言

2020-11-24 09:50:22

大數據語言go

2020-07-16 08:05:15

JavaGo

2020-10-09 14:39:55

計算機IT技術

2022-10-24 09:57:02

runeGo語言

2022-04-06 08:19:13

Go語言切片

2023-08-22 08:00:00

編譯器開發RustOCaml

2018-03-12 22:13:46

GO語言編程軟件

2014-12-08 09:47:48

Go

2023-05-15 08:01:16

Go語言
點贊
收藏

51CTO技術棧公眾號

一本色道久久综合一区| 国产伦理久久久久久妇女 | 91精品国产99久久久久久红楼 | 亚洲最大福利视频| 日韩精品一区二区不卡| 成人av二区| 精品人在线二区三区| 亚洲成人福利在线观看| 免费在线中文字幕| 亚洲国产成人午夜在线一区 | 亚洲影院天堂中文av色| 91精品一区二区三区在线观看| a在线视频观看| 黄色一级大片在线免费看产| 久久久久久久久久久久久久久99 | 久久久亚洲国产天美传媒修理工| 精品国产成人亚洲午夜福利| 中文久久电影小说| 欧美视频一区在线观看| 丰满少妇被猛烈进入高清播放| 美女国产在线| 国产日韩欧美不卡| 精品日产一区2区三区黄免费| 97在线公开视频| 日韩影院免费视频| 欧美一区二区.| 国产一级片播放| 我不卡伦不卡影院| 伊人激情综合网| 国产色视频一区二区三区qq号| 午夜视频一区二区在线观看| 欧美日韩一区二区三区不卡| 中文字幕乱码人妻综合二区三区 | 国产三区四区在线观看| heyzo一本久久综合| 3d动漫啪啪精品一区二区免费| 天天干天天插天天射| 中文在线不卡| 91av在线看| 国产成人免费看| 99视频精品| 午夜精品久久久久久久男人的天堂| 国产高清在线免费观看| 欧美.www| 欧美黄色三级网站| 久久国产免费观看| 国户精品久久久久久久久久久不卡| 久久深夜福利免费观看| 国产黄色录像片| 98精品视频| 精品国产一区二区在线 | 性做久久久久久免费观看| h无码动漫在线观看| 污片在线免费观看| 一区二区三区久久| 日本黄色片一级片| 美女高潮视频在线看| 欧美日韩亚洲高清| 免费成人午夜视频| 欧美www.| 欧美乱熟臀69xxxxxx| 在线免费黄色网| 国产精品白丝久久av网站| 欧美一区二区三区四区久久| 中文字幕55页| 国产精品玖玖玖在线资源| 亚洲精品av在线| 国产精品高清无码在线观看| 欧美限制电影| 欧美另类高清videos| 伊人365影院| 久久亚洲精选| 国产日韩欧美中文在线播放| japanese国产| 97精品久久久久中文字幕 | 精品久久av| 中文字幕乱码日本亚洲一区二区| 亚洲综合视频一区| 免费污视频在线| 欧美天堂在线观看| 中文字幕线观看| 高清精品视频| 在线观看日韩www视频免费| 在线观看美女av| 伊人精品视频| 国产精品专区一| 亚洲精品人妻无码| 欧美国产国产综合| 奇米777四色影视在线看| 成人线上视频| 欧美一区在线视频| 亚洲熟妇无码av| 在线一区免费| 人妖精品videosex性欧美| 国产又爽又黄免费软件| 99久久综合狠狠综合久久| 一区二区国产日产| 涩涩网在线视频| 91精品国产入口在线| 中国黄色a级片| 一本精品一区二区三区| 国产97在线|亚洲| 性做久久久久久久久久| 欧美国产一区视频在线观看| 欧美久久在线观看| 国产成人精品一区二区三区免费| 欧美精品一区二区在线观看| 免费一级suv好看的国产网站| 亚洲电影在线| 亚洲bt欧美bt日本bt| 精品亚洲综合| 精品magnet| 91人人澡人人爽| 欧美电影《轻佻寡妇》| 日韩美女视频在线观看| 丰满肥臀噗嗤啊x99av| 日韩美女视频一区二区| 亚洲少妇第一页| 你懂的在线观看一区二区| 美女福利视频一区| 在线观看免费视频a| 久久久国产精品麻豆| 久久久久久久久久网| 国产一区二区三区国产精品| 色小说视频一区| 欧美超碰在线观看| 97久久久精品综合88久久| 成年人看的毛片| 亚洲1区在线| 久久婷婷国产麻豆91天堂| 成人午夜精品视频| 久久综合国产精品| 奇米精品一区二区三区| 福利在线一区| 久久久中文字幕| 性猛交xxxx乱大交孕妇印度| 综合欧美亚洲日本| 国产性生活一级片| 久久久久久久久久久久久久久久久久| 国产精品视频网| 搞黄视频在线观看| 在线看一区二区| 色屁屁草草影院ccyy.com| 久久婷婷av| 欧美12av| 亚洲精品**中文毛片| 日韩精品在线电影| 亚洲影院在线播放| 国产婷婷色一区二区三区| 日韩精品一区二区三区色欲av| 琪琪久久久久日韩精品| 日本韩国在线不卡| 国产精品视频一区二区久久| 日本韩国欧美在线| 懂色av蜜臀av粉嫩av永久| 久久精品国产**网站演员| 中文字幕一区二区三区精彩视频| 懂色av色香蕉一区二区蜜桃| 九色精品美女在线| 日本激情一区二区| 色天天综合色天天久久| 亚洲欧洲综合网| 国产盗摄一区二区三区| 成人毛片一区二区| 精品国产一区二区三区噜噜噜| 国产精品永久在线| 午夜dj在线观看高清视频完整版| 亚洲第一福利网| 亚洲成熟少妇视频在线观看| 国产精品乱码人人做人人爱| 制服下的诱惑暮生| 99国产精品久久久久久久成人热| 欧美一区二区视频17c| 国产精品99| 欧美黄色小视频| 九一国产在线| 欧美一区二区视频网站| 欧美福利视频一区二区| 国产精品热久久久久夜色精品三区 | 欧美精品 日韩| 国产无遮挡免费视频| 国产欧美日韩三区| 午夜视频在线免费看| 国产欧美91| 日本丰满少妇黄大片在线观看| 成人性生交大片免费看96| 国产成人精品一区二区三区| 91蜜桃在线视频| 亚洲美女免费精品视频在线观看| 一级α片免费看刺激高潮视频| 亚洲在线观看免费| 实拍女处破www免费看| 国产在线不卡一卡二卡三卡四卡| 免费国产a级片| 爽成人777777婷婷| 久久亚洲一区二区| 日韩影片在线观看| 国产精品流白浆视频| 国产99re66在线视频| 中文字幕亚洲一区| 天堂资源中文在线| 日韩欧美国产三级电影视频| 亚洲精品中文字幕乱码三区91| 一区二区三区在线视频观看 | 亚洲精品国产一区二区精华液 | 男人的天堂在线| 精品久久久网站| 91国在线视频| 色综合久久综合网97色综合| 久久精品这里有| 亚洲视频免费观看| 欧美波霸videosex极品| 99国产精品99久久久久久| 免费高清视频在线观看| 青青青爽久久午夜综合久久午夜| www.99热这里只有精品| 欧美99久久| 一区二区三区四区视频在线观看| 亚洲色图美女| 激情视频一区二区| 综合欧美亚洲| 99国产视频在线| 高清一区二区| 成人在线中文字幕| 国产福利亚洲| 国产精品视频久久| 电影一区二区| 国产精品福利观看| 欧美xxx视频| 欧美亚洲国产视频| 日本蜜桃在线观看视频| 亚洲3p在线观看| 2020av在线| 91国产精品电影| bbw在线视频| 91精品国产91久久久久久不卡| 伦理av在线| 久久免费国产视频| 超免费在线视频| 97免费视频在线播放| yellow字幕网在线| 97免费中文视频在线观看| 爱搞国产精品| 91超碰caoporn97人人| 黑森林国产精品av| 欧美一区二区视频97| 中文在线免费视频| 国产成人综合一区二区三区| 日韩制服诱惑| 成人午夜一级二级三级| 精品欧美视频| 国产精品二区在线观看| 97青娱国产盛宴精品视频| 999在线观看免费大全电视剧| 大奶一区二区三区| 精品国产一区二区三区四区vr | 日韩欧乱色一区二区三区在线| 国产精品尤物福利片在线观看| а天堂中文最新一区二区三区| 91手机在线视频| 欧美freesex8一10精品| 欧美精品欧美精品| 日本久久精品| 免费的av在线| 一区二区黄色| 另类小说色综合| 国产乱子轮精品视频| 性感美女一区二区三区| 91网站在线播放| 91在线无精精品白丝| 亚洲人成网站影音先锋播放| 久久国产露脸精品国产| 色哟哟国产精品免费观看| 亚洲天堂网在线视频| 日韩你懂的在线播放| 午夜激情小视频| 中文字幕一区日韩电影| 欧美14一18处毛片| 欧美在线影院在线视频| 91精品一区| 精品国产乱码久久久久久88av| 欧美肉体xxxx裸体137大胆| 国产树林野战在线播放| 国产日韩欧美一区| 一级日本黄色片| 久久婷婷久久一区二区三区| 一级黄色片日本| 大伊人狠狠躁夜夜躁av一区| 一区二区日韩视频| 亚洲国产精品热久久| 91最新在线| 97超碰色婷婷| 国产精品一区二区三区四区在线观看 | 久久艹在线视频| 在线人成日本视频| 91精品国产91久久久久青草| 精品国产一区二区三区久久久樱花 | heyzo高清国产精品| 国产精品中文久久久久久久| 秋霞影视一区二区三区| 中文字幕の友人北条麻妃| 久久精品人人| 国产精品久久久久久在线观看| 中文字幕中文乱码欧美一区二区| 亚洲影院在线播放| 欧美精品一区二区久久久| 一区二区高清不卡| 欧美在线亚洲在线| 久久夜色电影| 永久免费网站视频在线观看| 美女国产一区二区三区| 在线观看国产网站| 亚洲宅男天堂在线观看无病毒| 亚洲永久精品视频| 亚洲新声在线观看| 欧美激情网站| 黄色小网站91| 精品999日本| 丰满少妇一区二区三区专区| 国产精品国产自产拍高清av| aaa在线视频| 亚洲毛片一区二区| 色资源二区在线视频| 成人高清在线观看| 欧美一区影院| 国产资源中文字幕| 亚洲视频网在线直播| 91国内精品视频| 综合激情国产一区| 91欧美精品| 色吧亚洲视频| 青青草一区二区三区| 69精品无码成人久久久久久| 色一区在线观看| 欧美成熟毛茸茸| 日韩av免费在线观看| 五月天亚洲色图| 欧美v在线观看| 91在线观看视频| 亚洲天堂男人av| 亚洲视频在线观看免费| 主播大秀视频在线观看一区二区| 日本在线视频不卡| 日本伊人色综合网| 国产欧美小视频| 欧美丰满高潮xxxx喷水动漫| 蜜芽在线免费观看| 91久色国产| 亚洲精品色图| 人妻丰满熟妇av无码久久洗澡 | 大片网站久久| 九九九九九九九九| 一区二区三区小说| 亚洲精品中文字幕成人片| 午夜精品一区二区三区在线| 欧美激情极品| 国产精品视频黄色| 日韩一区中文字幕| 亚洲精品一区二区三区新线路| 亚洲18私人小影院| 精品美女视频| 青青草久久伊人| 亚洲第一综合色| 国内精品一区视频| 成人免费午夜电影| 合欧美一区二区三区| 右手影院亚洲欧美| 欧美视频精品在线观看| 色呦呦久久久| 免费看成人片| 久久国产精品99久久人人澡| 久久久久久久久久网站| 日韩精品在线视频观看| 韩国精品视频在线观看| 欧美一级爱爱视频| 久久久久久亚洲综合影院红桃| 最近日韩免费视频| 久久久久久999| 成人高清电影网站| 亚洲少妇一区二区| 色天天综合色天天久久| 99热国产在线| 欧美高清性xxxxhd | 自拍偷拍中文字幕| 欧美精品免费视频| 黄频免费在线观看| 9999在线观看| 久久综合色8888| 朝桐光av在线一区二区三区| 欧美一区二区三区精品电影| 亚洲欧美网站在线观看| 中文字幕被公侵犯的漂亮人妻| 日韩三级精品电影久久久| 小黄鸭精品aⅴ导航网站入口| 亚洲色图都市激情| 国产亚洲视频系列| 少妇又色又爽又黄的视频| 国产在线精品一区免费香蕉 | 国产这里只有精品| 校园春色综合网|