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

異步編程的幾種方式,你知道幾種?

開發 后端
這篇文章會涉及到回調、Promise、反應式、async/await、用戶態線程等異步編程的實現方案。如果你熟悉它們中的一兩種,那應該也能很快理解其他幾個。

 近期嘗試在搬磚專用語言 Java 上實現異步,起因和過程就不再詳述了,總而言之,心中一萬頭草泥馬奔過。但這個過程也沒有白白浪費,趁機回顧了一下各種異步編程的實現。

這篇文章會涉及到回調、Promise、反應式、async/await、用戶態線程等異步編程的實現方案。如果你熟悉它們中的一兩種,那應該也能很快理解其他幾個。

為什么需要異步?

操作系統可以看作是個虛擬機(VM),進程生活在操作系統創造的虛擬世界里。進程不用知道到底有多少 core 多少內存,只要進程不要索取的太過分,操作系統就假裝有無限多的資源可用。

基于這個思想,線程(Thread)的個數并不受硬件限制:你的程序可以只有一個線程、也可以有成百上千個。操作系統會默默做好調度,讓諸多線程共享有限的 CPU 時間片。這個調度的過程對線程是完全透明的。

那么,操作系統是怎樣做到在線程無感知的情況下調度呢?答案是上下文切換(Context Switch),簡單來說,操作系統利用軟中斷機制,把程序從任意位置打斷,然后保存當前所有寄存器——包括最重要的指令寄存器 PC 和棧頂指針 SP,還有一些線程控制信息(TCB),整個過程會產生數個微秒的 overhead。

然而作為一位合格的程序員,你一定也聽說過,線程是昂貴的:

  •  線程的上下文切換有不少的代價,占用寶貴的 CPU 時間;
  •  每個線程都會占用一些(至少 1 頁)內存。

這兩個原因驅使我們盡可能避免創建太多的線程,而異步編程的目的就是消除 IO wait 阻塞——絕大多數時候,這是我們創建一堆線程、甚至引入線程池的罪魁禍首。

Continuation

回調函數知道的人很多,但了解 Continuation 的人不多。Continuation 有時被晦澀地翻譯成“計算續體”,咱們還是直接用單詞好了。

把一個計算過程在中間打斷,剩下的部分用一個對象表示,這就是 Continuation。操作系統暫停一個線程時保存的那些現場數據,也可以看作一個 Continuation。有了它,我們就能在這個點接著剛剛的斷點繼續執行。

打斷一個計算過程聽起來很厲害吧!實際上它每時每刻都在發生——假設函數 f() 中間調用了 g(),那 g() 運行完成時,要返回到 f() 剛剛調用 g() 的地方接著執行。這個過程再自然不過了,以至于所有編程語言(匯編除外)都把它掩藏起來,讓你在編程中感覺不到調用棧的存在。

操作系統用昂貴的軟中斷機制實現了棧的保存和恢復。那有沒有別的方式實現 Continuation 呢?最樸素的想法就是,把所有用得到的信息包成一個函數對象,在調用 g() 的時候一起傳進去,并約定:一旦 g() 完成,就拿著結果去調用這個 Continuation。

這種編程模式被稱為 Continuation-passing style(CPS):

  1.  把調用者 f() 還未執行的部分包成一個函數對象 cont,一同傳給被調用者 g();
  2.  正常運行 g() 函數體;
  3.  g() 完成后,連同它的結果一起回調 cont,從而繼續執行 f() 里剩余的代碼。

再拿 Wikipedia 上的定義鞏固一下:

A function written in continuation-passing style takes an extra argument: an explicit "continuation", i.e. a function of one argument. When the CPS function has computed its result value, it "returns" it by calling the continuation function with this value as the argument.

CPS 風格的函數帶一個額外的參數:一個顯式的 Continuation,具體來說就是個僅有一個參數的函數。當 CPS 函數計算完返回值時,它“返回”的方式就是拿著返回值調用那個 Continuation。

你應該已經發現了,這也就是回調函數,我只是換了個名字而已。

異步的樸素實現:Callback

光有回調函數其實并沒有卵用。對于純粹的計算工作,Call Stack 就很好,為何要費時費力用回調來做 Continuation 呢?你說的對,但僅限于沒有 IO 的情況。我們知道 IO 通常要比 CPU 慢上好幾個數量級,在 BIO 中,線程發起 IO 之后只能暫停,然后等待 IO 完成再由操作系統喚醒。 

  1. var input = recv_from_socket()  // Block at syscall recv()  
  2. var result = calculator.calculate(input)  
  3. send_to_socket(result) // Block at syscall send() 

而異步 IO 中,進程發起 IO 操作時也會一并輸入回調(也就是 Continuation),這大大解放了生產力——現場無需等待,可以立即返回去做其他事情。一旦 IO 成功后,AIO 的 Event Loop 會調用剛剛設置的回調函數,把剩下的工作完成。這種模式有時也被稱為 Fire and Forget。 

  1. recv_from_socket((input) -> {  
  2.     var result = calculator.calculate(input)  
  3.     send_to_socket(result) // ignore result  
  4. }) 

就這么簡單,通過我們自己實現的 Continuation,線程不再受 IO 阻塞,可以自由自在地跑滿 CPU。

一顆語法糖:Promise

回調函數哪里都好,就是不大好用,以及太丑了。

第一個問題是可讀性大大下降,由于我們繞開操作系統自制 Continuation,所有函數調用都要傳入一個 lambda 表達式,你的代碼看起來就像要起飛一樣,縮進止不住地往右挪(the "Callback Hell")。

第二個問題是各種細節處理起來很麻煩,比如,考慮下異常處理,看來傳一個 Continuation 還不夠,最好再傳個異常處理的 callback。

Promise 是對異步調用結果的一個封裝,在 Java 中它叫作 CompletableFuture (JDK8) 或者 ListenableFuture (Guava)。Promise 有兩層含義:

第一層含義是:我現在還不是真正的結果,但是承諾以后會拿到這個結果。這很容易理解,異步的任務遲早會完成,調用者如果比較蠢萌,他也可以用 Promise.get() 強行要拿到結果,順便阻塞了當前線程,異步變成了同步。

第二層含義是:如果你(調用者)有什么吩咐,就告訴我好了。這就有趣了,換句話說,回調函數不再是傳給 g(),而是 g() 返回的 Promise,比如之前那段代碼,我們用 Promise 來書寫,看起來順眼了不少。 

  1. var promise_input = recv_from_socket()  
  2. promise_input.then((input) -> {  
  3.     var result = calculator.calculate(input)  
  4.     send_to_socket(result) // ignore result  
  5. }) 

Promise 改善了 Callback 的可讀性,也讓異常處理稍稍優雅了些,但終究是顆語法糖。

反應式編程

反應式(Reactive)最早源于函數式編程中的一種模式,隨著微軟發起 ReactiveX 項目并一步步壯大,被移植到各種語言和平臺上。Reactive 最初在 GUI 編程中有廣泛的應用,由于異步調用的高性能,很快也在服務器后端領域遍地開花。

Reactive 可以看作是對 Promise 的極大增強,相比 Promise,反應式引入了流(Flow)的概念。ReactiveX 中的事件流從一個 Observable 對象流出,這個對象可以是一個按鈕,也可以是 Restful API,總之,它能被外界觸發。與 Promise 不同的是,事件可能被觸發多次,所以處理代碼也會被多次調用。

一旦允許調用多次,從數據流動的角度看,事實上模型已經是 Push 而非 Pull。那么問題來了,如果調用頻率非常高,以至于我們處理速度跟不上了怎么辦?所以 RX 框架又引入了 Backpressure 機制來進行流控,最簡單的流控方式就是:一旦 buffer 滿,就丟棄掉之后的事件。

ReactiveX 框架的另一個優點是內置了很多好用的算子,比如:merge(Flow 合并),debounce(開關除顫)等等,方便了業務開發。下面是一個 RxJava 的例子:

CPS 變換:Coroutine 與 async/await

無論是反應式還是 Promise,說到底仍然沒有擺脫手工構造 Continuation:開發者要把業務邏輯寫成回調函數。對于線性的邏輯基本可以應付自如,但是如果邏輯復雜一點呢?(比如,考慮下包含循環的情況)

有些語言例如 C#,JavaScript 和 Python 提供了 async/await 關鍵字。與 Reactive 一樣,這同樣出自微軟 C# 語言。在這些語言中,你會感到前所未有的爽感:異步編程終于擺脫了回調函數!唯一要做的只是在異步函數調用時加上 await,編譯器就會自動把它轉化為協程(Coroutine),而非昂貴的線程。

魔法的背后是 CPS 變換,CPS 變換把普通函數轉換成一個 CPS 的函數,即 Continuation 也能作為一個調用參數。函數不僅能從頭運行,還能根據 Continuation 的指示繼續某個點(比如調用 IO 的地方)運行。

可以看到,函數已經不再是一個函數了,而是變成一個狀態機。每次 call 它、或者它 call 其他異步函數時,狀態機都會做一些計算和狀態輪轉。說好的 Continuation 在哪呢?就是對象自己(this)啊。

CPS 變換實現非常復雜,尤其是考慮到 try-catch 之后。但是沒關系,復雜性都在編譯器里,用戶只要學兩個關鍵詞即可。這個特性非常優雅,比 Java 那個廢柴的 CompletableFuture 不知道高到哪去了

JVM 上也有一個實現:electronicarts/ea-async,原理和 C# 的 async/await 類似,在編譯期修改 Bytecode 實現 CPS 變換。

終極方案:用戶態線程

有了 async/await,代碼已經簡潔很多了,基本上和同步代碼無異。是否有可能讓異步代碼和同步代碼完全一樣呢?聽起來就像免費午餐,但是的確可以做到!

用戶態線程的代表是 Golang。JVM 上也有些實現,比如 Quasar,不過因為 JDBC、Spring 這些周邊生態(它們占據了大部分 IO 操作)的缺失基本沒有什么用。

關注公眾號Java技術棧,在后臺回復:面試,可以獲取我整理的 Java 多線程系列面試題和答案,非常齊全。

用戶態線程是把操作系統提供的線程機制完全拋棄,換句話說,不去用這個 VM 的虛擬化機制。比如硬件有 8 個核心,那就創建 8 個系統線程,然后把 N 個用戶線程調度到這 8 個系統線程上跑。N 個用戶線程的調度在用戶進程里實現,由于一切都在進程內部,切換代價要遠遠小于操作系統 Context Switch。

另一方面,所有可能阻塞系統級線程的事情,例如 sleep()、recv() 等,用戶態線程一定不能碰,否則它一旦阻塞住也就帶著那 8 個系統線程中的一個阻塞了。Go Runtime 接管了所有這樣的系統調用,并用一個統一的 Event loop 來輪詢和分發。

另外,由于用戶態線程很輕量,我們完全沒必要再用線程池,如果需要開線程就直接創建。比如 Java 中的 WebServer 幾乎一定有個線程池,而 Go 可以給每個請求開辟一個 goroutine 去處理。并發編程從未如此美好!

總結

以上方案中,Promise、Reactive 本質上還是回調函數,只是框架的存在一定程度上降低了開發者的心智負擔。而 async/await 和用戶態線程的解決方案要優雅和徹底的多,前者通過編譯期的 CPS 變換幫用戶創造出 CPS 式的函數調用;后者則繞開操作系統、重新實現一套線程機制,一切調度工作由 Runtime 接管。

不知道是不是因為歷史包袱太重,Java 語言本身提供的異步編程支持弱得可憐,即便是 CompletableFuture 還是在 Java 8 才引入,其后果就是很多庫都沒有異步的支持。雖然 Quasar 在沒有語言級支持的情況下引入了 CPS 變換,但是由于缺少周邊生態的支持,實際很難用在項目中。

最后,關注公眾號Java技術棧,在后臺回復:面試,可以獲取我整理的 Java 多線程系列面試題和答案,非常齊全。 

 

責任編輯:龐桂玉 來源: Java技術棧
相關推薦

2021-08-02 11:13:28

人工智能機器學習技術

2024-05-10 07:44:23

C#進程程序

2021-02-27 16:08:17

Java異步非阻塞

2024-02-05 12:08:07

線程方式管理

2022-05-27 06:57:50

Python循環方式生成器

2023-12-27 12:12:35

NumPy函數數組

2024-09-20 08:04:54

2019-07-23 15:56:56

Spring Boot部署servlet

2023-10-30 11:53:37

繼承JS父類

2019-07-23 17:52:59

Spring BootJava開發

2025-01-21 10:04:40

Java并發阻塞隊列

2018-09-12 11:18:56

finalJava用法

2024-06-12 08:05:06

2024-04-24 11:24:43

C#數據去重

2024-11-04 09:39:08

Java?接口Thread?類

2020-09-07 08:00:48

2020-09-28 14:24:09

字典Dictionary遍歷

2018-02-08 09:04:58

Nginx404頁面方法

2021-08-05 07:28:25

Java實現方式

2025-07-15 13:41:28

點贊
收藏

51CTO技術棧公眾號

日韩一级网站| 91丨精品丨国产| 欧美国产欧美综合| 亚洲一区二区三| 中日韩精品视频在线观看| 久久综合色占| 日韩欧美国产一区在线观看| 欧美成人一区二区在线观看| 欧美尤物美女在线| 99久久精品久久久久久清纯| 国产日韩av在线| 国产精品1000| 欧美电影三区| 日韩成人久久久| 污视频网址在线观看| 国产伦理精品| 1024精品合集| 日本在线视频一区| 亚洲精品国偷拍自产在线观看蜜桃 | 色综合一个色综合| 乱子伦一区二区| av在线免费观看网| av资源站一区| 91九色视频在线观看| 黄色av一级片| 中文亚洲字幕| 欧美剧在线观看| 极品人妻videosss人妻| 欧美黑白配在线| 欧美一区二区视频观看视频 | 国产一区二区视频在线观看免费| 美女网站色精品尤物极品姐弟| 欧美剧情片在线观看| 国产在线观看福利| 女海盗2成人h版中文字幕| 亚洲伦理在线精品| 自拍另类欧美| 午夜免费福利在线观看| 不卡av在线网| 动漫美女被爆操久久久| 国产男男gay体育生白袜| 欧美xo影院| 亚洲午夜私人影院| 国产中文一区二区| 亚洲第一精品网站| 国产一区二区免费视频| 成人免费在线网址| 国产精品爽爽久久| 精品一区二区三区日韩| 国产精品美女免费视频| 免费黄色片视频| 免费在线亚洲| 欧洲成人性视频| 日本在线播放视频| 国产欧美综合一区二区三区| 久久久免费电影| 国产一级大片在线观看| 欧美激情综合| 国内精品久久久久影院 日本资源| 天天看片中文字幕| 欧美欧美天天天天操| 欧美成人第一页| 欧美成人精品欧美一级| 一区免费在线| 欧美与欧洲交xxxx免费观看 | 久久本道综合色狠狠五月| 欧洲成人一区二区三区| 99在线精品视频| 欧美凹凸一区二区三区视频| 香蕉视频成人在线| 久久精品一区蜜桃臀影院| 日本一区二区高清视频| 1024视频在线| 一区二区视频在线| 九一国产精品视频| 奇米777日韩| 欧美日本在线看| 无码人妻丰满熟妇啪啪网站| 英国三级经典在线观看| 色域天天综合网| av污在线观看| 日本免费一区二区视频| 国产视频精品xxxx| 中文字幕观看av| 国自产拍偷拍福利精品免费一 | 五月婷婷开心网| 视频一区二区国产| 91九色单男在线观看| 免费观看黄色一级视频| 26uuu精品一区二区| 亚洲一区二区精品在线观看| 怡红院红怡院欧美aⅴ怡春院| 亚洲福中文字幕伊人影院| 欧美成人黑人猛交| 欧美成年网站| 亚洲欧美另类在线观看| 外国一级黄色片| 老鸭窝毛片一区二区三区| 91精品综合久久久久久五月天| 色欲久久久天天天综合网| 国产欧美一区二区三区在线老狼| 国风产精品一区二区| 成人免费影院| 亚洲高清三级视频| 污版视频在线观看| 久久男人av| 久久精视频免费在线久久完整在线看| 久久久久久久久艹| 美国一区二区三区在线播放 | 国产一区毛片| 亚洲精品久久久久久久久久久| 亚洲ⅴ国产v天堂a无码二区| 亚洲精选91| 成人自拍性视频| 国产黄在线观看| 亚洲国产成人精品视频| 特级西西444www| 黑丝美女一区二区| 97视频人免费观看| a天堂中文在线观看| 国产欧美日韩在线视频| 欧美日韩不卡在线视频| 成人免费在线观看视频| 精品视频久久久| 免费在线观看av网址| 精品一区二区三区免费观看| 日韩免费电影一区二区| 国产污视频在线播放| 欧美精品久久天天躁| 国产ts在线播放| 亚洲人www| 3d蒂法精品啪啪一区二区免费| 超碰国产在线| 黄色一区二区在线| 亚洲成人精品在线播放| 亚洲第一偷拍| 91免费的视频在线播放| 日韩黄色影院| 欧美日韩精品一区二区| 亚洲av成人无码久久精品 | 亚洲精品国产a久久久久久| 欧美一级裸体视频| 国产一区二区精品久| 国产98色在线| 国外av在线| 一本大道久久a久久综合婷婷| www.免费av| 亚洲视频大全| 久久综合九色综合久99| 性欧美18xxxhd| 亚洲精品综合精品自拍| 日本一区二区免费电影| 国产日韩欧美精品电影三级在线| 日本在线视频www| 欧美精选一区二区三区| 国产精品日韩在线观看| 日韩黄色影院| 777久久久精品| 麻豆成人在线视频| 成a人片亚洲日本久久| 精品国产一区三区| 亚洲日产av中文字幕| 国产福利成人在线| a√资源在线| 在线播放亚洲一区| 久久精品一区二区三| 成人黄色在线网站| 成年人视频网站免费观看| 欧美精选视频在线观看| 91老司机在线| 欧美xxx黑人xxx水蜜桃| 亚洲国内精品视频| 欧美男人天堂网| 中文字幕日韩欧美一区二区三区| 国产精品中文久久久久久| 99综合精品| 五码日韩精品一区二区三区视频| 欧美视频在线视频精品| 久久久久久成人精品| 你懂的视频在线免费| 欧美三级三级三级爽爽爽| 我要看黄色一级片| 91在线一区二区三区| 手机在线看福利| 欧美视频久久| 日本一区二区三区精品视频| 欧美影院在线| 国产成人精品视| 丝袜在线视频| 亚洲欧美国产精品| 国产白浆在线观看| 91福利视频久久久久| 久久久久久久久毛片| 久久综合视频网| 先锋资源在线视频| 视频在线观看国产精品| 久久综合久久久久| 日韩伦理一区| 狠狠久久综合婷婷不卡| 色综合一区二区日本韩国亚洲| 久久久久久久久久久免费 | 色噜噜狠狠一区二区三区狼国成人| 一个色综合网| 欧美亚洲免费高清在线观看| 国产精品麻豆| 国产成人精品一区二区| 国精产品一区一区三区mba下载| 一区二区三区动漫| 国精产品一品二品国精品69xx | 成人黄色在线播放| 超碰激情在线| 久久国产精品电影| 91在线看片| 亚洲欧洲免费视频| 日韩一级免费毛片| 欧美一级一区二区| 在线观看一二三区| 在线观看日韩毛片| 91精品国产高清一区二区三密臀| 亚洲精品国产第一综合99久久| 亚洲色图 激情小说| 91丨porny丨国产入口| 亚洲综合中文网| 激情综合网激情| 亚洲天堂网一区| 另类图片国产| 一本大道熟女人妻中文字幕在线 | 四季av日韩精品一区| 日韩一区二区电影| 91在线你懂的| 欧美日韩免费一区二区三区| 精品成人无码久久久久久| 日韩欧美在线中文字幕| 日韩乱码一区二区| 亚洲va欧美va天堂v国产综合| 99久久婷婷国产综合| 最近日韩中文字幕| 国产wwwwxxxx| 国产精品国产三级国产aⅴ原创| 人妻aⅴ无码一区二区三区| 久久综合久色欧美综合狠狠| a天堂视频在线观看| gogogo免费视频观看亚洲一| fc2成人免费视频| 丰满岳乱妇一区二区三区| 中文字幕乱妇无码av在线| 国产一区二区免费视频| 麻豆传媒在线看| 国产成人精品一区二区三区四区 | 成人网页在线观看| 久久久高清视频| 99re亚洲国产精品| 30一40一50老女人毛片| 久久精品视频免费观看| 永久免费毛片在线观看| 国产精品视频你懂的| 成人18视频免费69| 最近中文字幕一区二区三区| 欧美偷拍第一页| 亚洲午夜久久久久| 亚洲欧美综合自拍| 欧美中文字幕一区| 国产又粗又长视频| 日韩一二三四区| 四虎永久在线精品免费网址| 亚洲欧美日韩成人| 日本在线观看视频| 欧美情侣性视频| 小h片在线观看| 国产精品揄拍500视频| 狂野欧美xxxx韩国少妇| 九9re精品视频在线观看re6| 国产成人三级| 国产精品夜夜夜爽张柏芝| 国内精品美女在线观看| 黄色片视频在线免费观看| 久久aⅴ国产欧美74aaa| 人妻 丝袜美腿 中文字幕| 91免费视频网址| 国产麻豆a毛片| 性感美女极品91精品| 亚洲自拍一区在线观看| 69成人精品免费视频| 丰满人妻一区二区三区免费视频| 亚洲美女又黄又爽在线观看| 毛片在线不卡| 97久久伊人激情网| 另类一区二区| 极品日韩久久| 国产韩日影视精品| 色综合久久久久无码专区| 九九久久精品视频 | 国产精品伦一区| 久久精品亚洲无码| 欧美日韩亚洲不卡| 午夜视频福利在线| 久久久精品在线| 欧美xxx性| 丁香婷婷久久久综合精品国产| 精品日韩一区| 18禁免费观看网站| 国产最新精品免费| 波多野吉衣中文字幕| 一区二区三区四区在线| 免费黄色一级大片| 日韩av网址在线观看| yellow91字幕网在线| 国产精品福利在线观看网址| 91夜夜蜜桃臀一区二区三区| 亚洲欧洲日韩综合二区| 久久av在线| 人妻换人妻a片爽麻豆| 亚洲少妇30p| 最新中文字幕在线观看视频| 亚洲国产精品字幕| 18+视频在线观看| 国产原创欧美精品| 国产精品羞羞答答在线观看| www.日本在线播放| 国产成人精品三级麻豆| 成人精品一二三区| 在线亚洲一区二区| 色鬼7777久久| 性欧美视频videos6一9| 18国产精品| 日韩精品久久一区二区| 国产一区二区调教| 熟女少妇a性色生活片毛片| 91久久线看在观草草青青| 性猛交xxxx| 91极品女神在线| 国产精品qvod| 国产freexxxx性播放麻豆| 国产精品影视在线| 9999热视频| 91精品国产丝袜白色高跟鞋| 黄色网页在线观看| 91老司机精品视频| 亚洲影视一区二区三区| 日本美女视频一区| 亚洲欧洲日韩一区二区三区| 中文字幕在线播放av| 国产一区二区三区在线看| 久久久成人av毛片免费观看| 日韩av一区二区三区美女毛片| 久久精品二区三区| 蜜桃久久精品成人无码av| 色女孩综合影院| 99青草视频在线播放视| 国产精品视频久| 色一区二区三区四区| 亚洲综合激情视频| 一区二区三区免费在线观看| 亚洲第一页综合| 97在线看福利| 欧美美女在线观看| 性生交免费视频| 国产精品黄色在线观看| 99久久精品国产一区色| 欧美日韩成人在线播放| 北条麻妃在线一区二区免费播放| 国产精品入口芒果| 久久久精品黄色| 欧美视频xxxx| 粗暴蹂躏中文一区二区三区| 亚洲1区在线| 精品一区二区中文字幕| 国产精品麻豆久久久| 国产ts变态重口人妖hd| 性金发美女69hd大尺寸| 国产精品亚洲人成在99www| 五月激情婷婷在线| 亚洲国产欧美日韩另类综合| 日本免费不卡| 国产在线日韩在线| 激情视频一区二区三区| 成年人在线观看av| 欧美日韩高清不卡| 97在线超碰| 手机在线观看国产精品| 国产精品99久久久久久有的能看 | 亚洲精一区二区三区| 五级黄高潮片90分钟视频| 欧美日韩高清一区二区三区| 国产嫩草在线视频| 视频在线精品一区| 成人精品小蝌蚪| 中日韩av在线| 国内精品伊人久久| 视频在线不卡免费观看| 精品1卡二卡三卡四卡老狼| 欧美揉bbbbb揉bbbbb| 888av在线视频| 亚洲一区bb| 91亚洲国产成人精品一区二三| 这里只有久久精品视频| 欧美激情中文网| 日韩精品一区二区三区免费观看| 91成人在线观看喷潮蘑菇| 欧美私模裸体表演在线观看|