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

群体交乱之放荡娇妻一区二区| 在线观看中文字幕的网站| 久久久久久穴| 欲色天天网综合久久| 中文字幕国产高清| 成人性生交大片免费看网站| 99re热这里只有精品视频| 国产高清视频一区三区| 欧洲第一无人区观看| 日本福利一区| 欧美精品欧美精品系列| 欧美精品久久久久久久久久久| 日本不卡视频一区二区| 精品写真视频在线观看| 国语自产在线不卡| 中文字幕美女视频| 日韩理论电影中文字幕| 欧美一区二区日韩| 乱子伦视频在线看| 视频在线这里都是精品| 国产欧美日韩综合精品一区二区| 99中文字幕| 中文字幕一区二区人妻视频| 欧美日韩视频一区二区三区| 在线日韩av观看| 少妇一级淫免费观看| 在线播放成人| 91国偷自产一区二区三区观看 | 91亚洲国产成人久久精品| 亚洲国产精品中文| 日本中文字幕有码| 亚洲欧洲二区| 欧美在线免费播放| 国产免费观看高清视频| 在线xxxx| 亚洲欧洲精品一区二区三区不卡| 日本一区二区三区四区在线观看 | 国产乱对白刺激视频不卡| 日韩av高清不卡| 国产精品白浆一区二小说| 91精品99| 中文字幕日韩综合av| 草草影院第一页| 九九热播视频在线精品6| 日韩午夜电影在线观看| 日韩欧美亚洲另类| 国产情侣一区二区三区| 欧美中文字幕一区二区三区亚洲| 色综合久久久久无码专区| hd国产人妖ts另类视频| 一区二区三区四区蜜桃| av中文字幕av| 中文字幕有码在线视频| 自拍偷自拍亚洲精品播放| 亚洲二区三区四区| sese在线视频| 中文字幕不卡一区| 亚洲精品乱码久久久久久蜜桃91| 福利视频在线看| 国产精品美日韩| 一区二区三区av在线| 日本在线观看视频| ●精品国产综合乱码久久久久| 一区二区国产日产| 制服丝袜中文字幕在线| 亚洲一区二区视频在线观看| 青青青在线观看视频| 国产www视频在线观看| 午夜成人免费电影| 国产午夜福利视频在线观看| 欧美天堂视频| 欧美日韩一区二区欧美激情| 日本三级黄色网址| 精品99re| 亚洲电影成人av99爱色| 中文字幕一区二区久久人妻网站| 蜜桃一区二区| 中文字幕日韩免费视频| 日本高清一二三区| 激情欧美丁香| 欧美一区在线直播| 最近中文在线观看| 国产精品一区一区三区| 国产乱子伦精品| 青青久草在线| 国产精品国产三级国产aⅴ无密码| 强伦女教师2:伦理在线观看| 色婷婷视频在线观看| 高潮白浆女日韩av免费看| 久久精品国产精品亚洲色婷婷| 欧美日韩激情电影| 日韩一区二区三区视频在线| 五月天丁香社区| 欧洲福利电影| 欧美激情第三页| 免费黄色av片| 国产高清亚洲一区| 日韩资源av在线| 影音先锋男人在线资源| 色综合久久久久综合| 婷婷激情四射五月天| 亚洲午夜免费| 国产一区二区久久精品| 国产极品美女高潮无套嗷嗷叫酒店| 男女精品视频| 7777精品伊久久久大香线蕉语言| 欧美少妇另类| 亚洲黄一区二区三区| www.四虎成人| ady日本映画久久精品一区二区| 亚洲日本成人女熟在线观看| 欧美精品久久久久性色| 奇米精品一区二区三区在线观看一| 91黄在线观看| av女优在线| 都市激情亚洲色图| 午夜免费视频网站| 成人3d精品动漫精品一二三| 91av在线视频观看| www.亚洲天堂.com| 国产精品黄色在线观看| 18岁网站在线观看| 视频一区国产| 波霸ol色综合久久| 免费看污视频的网站| 99视频超级精品| 女人床在线观看| 欧美天堂一区| 一个人看的www久久| 中文字幕精品三级久久久| 国产成人精品一区二| 裸体大乳女做爰69| 欧美综合社区国产| 中文字幕一区电影| 伊人网视频在线| 久久久久亚洲综合| 黑森林福利视频导航| 老司机在线精品视频| 欧美高跟鞋交xxxxxhd| 国产精品女人久久久| 国产精品丝袜91| 午夜dv内射一区二区| 亚洲精品推荐| 欧美孕妇与黑人孕交| 五月色婷婷综合| 亚洲高清视频在线| 国产亚洲精品成人a| 欧美激情偷拍| 国产不卡一区二区在线观看| 人妖欧美1区| 精品国产免费人成在线观看| 亚洲一区二区91| 成a人片亚洲日本久久| 精品国产av无码一区二区三区| 亚洲一区二区三区中文字幕在线观看 | 亚洲国产综合av| 91高清一区| 99re热精品| 超碰在线网站| 亚洲国产精品中文| 日韩一级在线视频| 国产拍欧美日韩视频二区| 国产日韩成人内射视频| 日韩精品中文字幕第1页| 91精品国产自产在线老师啪| 二区三区四区高清视频在线观看| 日韩欧美综合一区| 日韩成人在线免费视频| 久久影院午夜片一区| 三级在线免费看| 天天做天天爱天天综合网2021| 亚洲精彩视频| 在线观看成人黄色| 中文字幕一区二区三区人妻四季| 国产精品―色哟哟| 欧美高清精品一区二区| 在线成人黄色| 日产精品一线二线三线芒果| 亚州精品国产| 久久久亚洲网站| 精品乱码一区二区三四区视频| 欧美日韩一卡二卡三卡 | 亚洲免费观看在线视频| 国产精品91av| 免费在线欧美黄色| 最新精品视频| 一本色道久久综合狠狠躁的番外| 国产精品久久久久久久一区探花| 在线观看av免费| 日韩理论片久久| 一级做a爰片久久毛片16| 一个色综合网站| av男人的天堂av| 国产精品亚洲一区二区三区妖精 | 亚洲国产欧美久久| 波多野结衣毛片| 亚洲一区在线播放| 黄色片网站免费| 成人自拍视频在线观看| 午夜国产一区二区三区| 黑人一区二区三区四区五区| 日韩精品第一页| 韩国女主播一区二区三区| 国产精品亚洲视频在线观看| 91超碰免费在线| 日韩亚洲综合在线| 女人天堂在线| 欧美变态tickling挠脚心| 精品成人无码久久久久久| 亚洲黄色尤物视频| av片在线免费看| 91首页免费视频| 日本黄色www| 免费久久99精品国产| 国产一区二区网| 欧美久久一级| 亚洲日本精品| 欧美激情在线免费| 精品在线不卡| 亚洲精品一区在线| 国产在线视频2019最新视频| 激情开心成人网| 欧美一级片在线播放| 日韩伦理电影网站| silk一区二区三区精品视频| 久久久久www| 九色蝌蚪在线| 亚洲精品中文字| 日本wwwxxxx| 日韩精品一区二区三区四区视频 | hd国产人妖ts另类视频| 超碰97人人做人人爱少妇| 91精彩视频在线观看| 亚洲人成电影网站色www| 无套内谢的新婚少妇国语播放| 日韩欧美一级在线播放| 国产麻豆一精品一男同| 欧美高清视频一二三区| 日本一区二区三区久久| 91久久精品国产91性色tv| 四虎影院在线免费播放| 欧美性猛交xxxx乱大交极品| 国产91av视频| 国产精品情趣视频| 国产精品麻豆免费版现看视频| 国产亚洲一二三区| 天天操天天舔天天射| 国产女同性恋一区二区| 波多野结衣av在线观看| 国产亚洲欧美一区在线观看| av女人的天堂| 国产欧美日韩在线观看| 国产一二三四视频| 亚洲色图一区二区| www.99re7| 亚洲一区二区av在线| 国产精品白浆一区二小说| 午夜精品福利在线| 国产www在线| 色欧美日韩亚洲| 羞羞色院91蜜桃| 91精品在线观看入口| av中文字幕播放| 亚洲大尺度美女在线| 婷婷丁香一区二区三区| 亚洲毛片在线观看.| 番号集在线观看| www.日韩欧美| 视频在线观看入口黄最新永久免费国产| 欧美猛男性生活免费| 国产99在线| 国产成人午夜视频网址| 欧美激情啪啪| 国产高清在线一区二区| 欧美freesex8一10精品| 日韩在线国产| 欧美精品大片| 日韩欧美xxxx| 国产麻豆视频一区| 亚洲天堂网一区二区| 中国av一区二区三区| 亚洲成人生活片| 欧美日韩亚洲91| 亚洲天堂999| 精品国产欧美一区二区| 国产午夜精品一区理论片| 欧美成人四级hd版| 粉嫩一区二区三区| 91成人免费观看| 精品盗摄女厕tp美女嘘嘘| japanese在线播放| 日本一区中文字幕| 亚洲少妇一区二区| 国产蜜臀97一区二区三区 | av一本在线| 久久久久久久色| 黄色精品视频| 国产伦视频一区二区三区| 久久裸体网站| 欧美性久久久久| 国产老肥熟一区二区三区| 亚洲精品乱码久久久久久久久久久久| 亚洲人成亚洲人成在线观看图片 | 九色porny丨首页入口在线| 性欧美视频videos6一9| 成人黄色毛片| 狠狠色综合欧美激情| 国产精品97| 男女视频一区二区三区| 国产福利精品导航| 国产三级在线观看完整版| 精品国产91久久久久久| 99精品免费观看| 怡红院精品视频| 欧美伦理91| 国产欧美亚洲日本| 羞羞答答成人影院www| 国产免费视频传媒| 不卡视频免费播放| 久久久无码一区二区三区| 欧美日韩国产综合久久| 人成在线免费视频| 午夜精品久久久99热福利| 精品国产欧美| 一区二区三区四区不卡| 久久婷婷av| 一出一进一爽一粗一大视频| 亚洲国产一区二区a毛片| 91亚洲精品国偷拍自产在线观看| 一本色道久久88综合亚洲精品ⅰ| 亚洲综合电影| 精品日本一区二区三区| 一区在线播放| 91亚洲一线产区二线产区| 一区二区三区在线观看视频| 国产成人精品免费看视频| 日韩资源在线观看| 国产精品xxx| 丝袜足脚交91精品| 日韩国产一区二| 久久久久久久久久久久| 一本色道**综合亚洲精品蜜桃冫| 无码国精品一区二区免费蜜桃| 性欧美xxxx交| 老牛影视av一区二区在线观看| 日韩亚洲欧美视频| 成人激情小说网站| 国产成人在线免费观看视频| 日韩www在线| 天堂中文最新版在线中文| 久久久久久久久久码影片| 羞羞答答国产精品www一本| 老鸭窝一区二区| 91精品1区2区| 秋霞午夜在线观看| 96国产粉嫩美女| 极品av少妇一区二区| a级一a一级在线观看| 天天影视涩香欲综合网| 天天操天天干天天爽| 青青久久aⅴ北条麻妃| 欧美日韩一区二区三区视频播放| 亚洲第一中文av| 亚洲视频你懂的| 亚洲国产精品suv| 91av在线免费观看| jlzzjlzz亚洲女人| 香蕉网在线视频| 亚洲超丰满肉感bbw| 青青草在线视频免费观看| 国产伦精品一区二区三区精品视频| 亚州av乱码久久精品蜜桃| 亚洲欧洲日韩综合| 色综合久久久久综合99| 免费黄色在线| 精品网站在线看| 肉色丝袜一区二区| 午夜精品福利在线视频| 精品自拍偷拍| 大伊香蕉精品视频在线| 26uuu精品一区二区| 91国内精品久久久| 国产+人+亚洲| 成久久久网站| 95视频在线观看| 一本到不卡精品视频在线观看| 麻豆传媒在线免费| 久久精品国产第一区二区三区最新章节 | 亚洲精品国产无码| 不卡毛片在线看| 九一精品国产| 制服.丝袜.亚洲.中文.综合懂| 一本到高清视频免费精品| 成人高清免费在线| 欧美日韩最好看的视频| 激情五月播播久久久精品| 国产精品一区二区6| 日韩一区二区三区xxxx| 日韩大片在线免费观看| 九九热免费在线观看|