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

提升系統吞吐量,詳解JDK21虛擬線程,炸裂

開發 前端
當前實現虛擬線程的一個限制是,在同步的塊或方法內部執行阻塞操作會導致JDK的虛擬線程調度器阻塞一個操作系統線程,而在同步的塊或方法外部執行阻塞操作則不會。

環境:JDK21

1. 虛擬線程簡介

虛擬線程是輕量級的線程,可以減少編寫、維護和調試高吞吐量并發應用程序的工作量。線程是可以調度的最小處理單元。它與其他類似單元并發運行,而且在很大程度上是獨立運行的。它是java.lang.Thread的一個實例。線程有兩種,平臺線程和虛擬線程。

2. 什么是平臺線程

平臺線程被實現為操作系統(OS)線程的薄包裝器。平臺線程在其底層操作系統線程上運行Java代碼,平臺線程在平臺線程的整個生命周期中捕獲其操作系統線程。因此,可用平臺線程的數量受限于操作系統線程的數量。

平臺線程通常有一個比較大的線程堆棧和由操作系統維護的其他資源。它們適用于運行所有類型的任務,但可能是有限的資源。

3. 什么是虛擬線程

與平臺線程一樣,虛擬線程也是java.lang.thread的一個實例。然而,虛擬線程并沒有綁定到特定的操作系統線程。虛擬線程仍然在操作系統線程上運行代碼。但是,當虛擬線程中運行的代碼調用阻塞I/O操作時,Java運行時會掛起虛擬線程,直到可以恢復為止。與掛起的虛擬線程相關聯的OS線程現在可以自由地執行其他虛擬線程的操作。

虛擬線程的實現方式與虛擬內存類似。為了模擬大量內存,操作系統將大量虛擬地址空間映射到有限的RAM。同樣,為了模擬大量線程,Java運行時將大量虛擬線程映射到少量操作系統線程。

與平臺線程不同,虛擬線程通常有一個淺調用堆棧,只執行一個HTTP客戶端調用或一個JDBC查詢。盡管虛擬線程支持線程本地變量和可繼承的線程本地變量,但應該仔細考慮使用它們,因為單個JVM可能支持數百萬個虛擬線程。

虛擬線程適用于運行大部分時間被阻塞的任務,這些任務通常等待I/O操作完成。然而,它們并不適用于長時間運行的CPU密集型操作。

4. 為什么使用虛擬線程

在高吞吐量并發應用程序中使用虛擬線程,尤其是那些由大量并發任務組成、花費大量時間等待的應用程序。服務器應用程序是高吞吐量應用程序的示例,因為它們通常處理許多執行阻塞I/O操作(如獲取資源)的客戶端請求。

虛擬線程不是更快的線程;它們運行代碼的速度并不比平臺線程快。它們的存在是為了提供規模(更高的吞吐量),而不是速度(更低的延遲)。

5. 創建虛擬線程

Thread和Thread.Builder APIs提供了創建平臺線程和虛擬線程的方法。java.util.concurrent.Executors類還定義了創建ExecutorService的方法,該方法為每個任務啟動一個新的虛擬線程。

5.1 Thread & Thread.Builder創建虛擬線程

調用Thread.ofVirtual()方法創建一個Thread.Builder實例,用于創建虛擬線程。如下示例:

Thread t= Thread.ofVirtual().start(() -> System.out.println("Hello")) ;
t.join() ;

Thread.Builder接口允許創建具有公共線程屬性(如線程名稱)的線程。Thread.Builder.OfPlatform子接口創建平臺線程,而Thread.Builder.OfVirtual創建虛擬線程。

下面的示例使用Thread.Builder接口創建一個名為T-VM的虛擬線程,如下示例:

Thread.Builder builder = Thread.ofVirtual().name("T-VM") ;
Runnable task = () -> {
  System.out.println("執行任務") ;
} ;
Thread t = builder.start(task) ;
System.err.printf("線程名稱: %s%n", t.getName()) ;
t.join() ;

輸出結果:

執行任務
線程名稱T-VM

下面的示例創建并啟動兩個具有Thread.Builder的虛擬線程:

Thread.Builder builder = Thread.ofVirtual().name("vm - worker - ", 0);
Runnable task = () -> {
  System.out.printf("線程ID: %d%n", Thread.currentThread().threadId());
} ;
// 線程 "vm - worker - 0"
Thread t1 = builder.start(task) ;   
t1.join();
System.out.println(t1.getName() + " terminated") ;
// 線程 "vm - worker - 1"
Thread t2 = builder.start(task) ;   
t2.join() ;  
System.out.println(t2.getName() + " terminated") ;

輸出結果:

線程ID: 21
vm - worker - 0 terminated
線程ID: 24
vm - worker - 1 terminated

以上是通過Thread.Builder創建虛擬線程的簡單示例。

5.2 Executors創建虛擬線程

Executors允許將線程管理和創建與應用程序的其余部分分離。

ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor() ;
// submit Runnable任務
Future<?> future = executor.submit(() -> System.out.println("Running thread")) ;
future.get() ;
System.out.println("Task completed") ;

上面示例每當調用ExecutorService.submit(Runnable)時,都會創建一個新的虛擬線程并開始運行該任務。

6. 虛擬線程調度

操作系統在平臺線程運行時進行調度。然而,Java運行時會在虛擬線程運行時進行調度。當Java運行時調度虛擬線程時,它將虛擬線程分配或掛載到平臺線程上,然后操作系統像往常一樣調度該平臺線程。這個平臺線程稱為載體(carrier)。運行一些代碼后,虛擬線程可以從它的載體卸載。這通常發生在虛擬線程執行阻塞I/O操作時。當一個虛擬線程從其宿主中卸載后,宿主就處于空閑狀態,這意味著Java運行時調度器可以在其上分配另一個虛擬線程。

虛擬線程被綁定到其宿主(平臺線程)時,在阻塞操作期間無法將其卸載。虛擬線程在以下情況下會被綁定:

  • 虛擬線程在同步塊或方法內運行代碼
  • 虛擬線程運行本機方法或外部函數

7. 虛擬線程應用指南

虛擬線程是由Java運行時而不是操作系統實現的Java線程。虛擬線程和傳統線程(平臺線程)的主要區別在于,可以很容易地在同一個Java進程中運行大量甚至數百萬個活動的虛擬線程。正是它們的數量賦予了虛擬線程強大的能力,通過允許服務器并發處理更多請求,它們可以更高效地運行以"thread-per-request"風格編寫的服務器應用程序,從而提高吞吐量,減少硬件浪費。

虛擬線程可以顯著提高以thread-per-request風格編寫的服務器的吞吐量,而不是延遲。在這種風格中,服務器在整個持續時間內使用一個線程來處理每個傳入的請求。它至少占用一個線程,因為在處理單個請求時,你可能希望使用更多線程并發地執行某些任務。

阻塞平臺線程的代價是昂貴的,因為它會占用線程——這是一種相對稀缺的資源——而線程并沒有做很多有意義的工作。因為虛擬線程可能很多,所以阻塞它們是廉價的,也是值得鼓勵的。因此,應該使用簡單的同步風格并使用阻塞I/O API編寫代碼。

如下代碼以非阻塞異步風格編寫,不會從虛擬線程中獲得太多好處。

HttpClient client = ... ;
Executor pool = Executors.newVirtualThreadPerTaskExecutor() ;
CompletableFuture.supplyAsync(() -> {
  HttpRequest request = HttpRequest.newBuilder(URI.create("http://localhost:8088/users/info")).build() ;
  BodyHandler<String> bodyHandler = ... ;
  try {
    return client.send(request , bodyHandler) ;
  }
}, pool)
.thenCompose(url -> getBodyAsync(url, HttpResponse.BodyHandlers.ofString()))
.thenApply(info::findImage)
.thenAccept(this::process)
.exceptionally(t -> { t.printStackTrace(); return null; });

相反,以下代碼以同步風格編寫,并使用簡單的阻塞IO,將受益匪淺:

try {
   String page = getBody(info.getUrl(), HttpResponse.BodyHandlers.ofString());
   String imageUrl = info.findImage(page);
   byte[] data = getBody(imageUrl, HttpResponse.BodyHandlers.ofByteArray());   
   info.setImageData(data);
   process(info);
}

8. 不要池化虛擬線程

關于虛擬線程最難理解的是,雖然它們與平臺線程具有相同的行為,但它們不應該表示相同的程序概念。

平臺線程很少,因此是一種寶貴的資源。寶貴的資源需要管理,管理平臺線程的最常見方法是使用線程池。接下來你需要回答的問題是,線程池中應該有多少個線程?

但是虛擬線程是很多的,因此每個線程不應該代表某種共享的、池化的資源,而應該代表一個任務。

將n個平臺線程轉換為n個虛擬線程幾乎沒有好處;相反,需要轉換的是任務。

為了將每個應用任務表示為一個線程,不要像下面的例子那樣使用共享線程池:

Future<ResultA> f1 = sharedThreadPoolExecutor.submit(task1);
Future<ResultB> f2 = sharedThreadPoolExecutor.submit(task2);
// ... use futures

相反,使用虛擬線程

try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
   Future<ResultA> f1 = executor.submit(task1);
   Future<ResultB> f2 = executor.submit(task2);
   // ... use futures
}

上面的代碼仍然使用ExecutorService,但從Executors.newVirtualThreadPerTaskExecutor()返回的代碼沒有使用線程池。相反,它為每個提交的任務創建一個新的虛擬線程。

此外,ExecutorService本身是輕量級的,我們可以像創建任何簡單對象一樣創建一個新的對象。這使得我們可以依賴新添加的ExecutorService#close方法和try-with-resources構造。close方法會在try塊結束時隱式調用,它會自動等待所有提交給ExecutorService的任務(即由ExecutorService生成的所有虛擬線程)結束。

對于扇出場景來說,這是一個特別有用的模式,在這種場景中,同時執行多個對不同服務調用,如下面的示例所示:

void handle() throws Exception {
  URL url1 = URI.create("http://www.pack.com").toURL() ;
  URL url2 = URI.create("http://www.akf.com").toURL() ;
  try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    var future1 = executor.submit(() -> fetchURL(url1));
    var future2 = executor.submit(() -> fetchURL(url2));
    System.out.printf("result1: %s, result2: %s%n", future1.get(),future2.get()) ;
  }
}


String fetchURL(URL url) throws IOException {
  try (var in = url.openStream()) {
    return new String(in.readAllBytes(), StandardCharsets.UTF_8);
  }
}

你應該創建一個新的虛擬線程,如上所示,即使是小的、短期的并發任務。

9. 避免長時間頻繁的Pinning

當前實現虛擬線程的一個限制是,在同步的塊或方法內部執行阻塞操作會導致JDK的虛擬線程調度器阻塞一個操作系統線程,而在同步的塊或方法外部執行阻塞操作則不會。這種情況稱為“Pinning”。如果阻塞操作持續時間長且頻繁,Pinning可能會對服務器的吞吐量產生負面影響。保護短期的操作,例如內存操作,或者使用同步塊或方法的不頻繁操作,應該不會有任何負面影響。

對于長時間又頻繁的地方應該使用ReentrantLock替換synchronized 。

synchronized(lockObj) {
  frequentIO() ;
}
// 替換為
lock.lock();
try {
  frequentIO() ;
} finally {
  lock.unlock() ;
}


責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2023-11-03 18:23:34

虛擬線程服務器

2023-10-20 08:12:00

JDK21線程池配置

2024-05-23 16:41:40

2023-12-28 10:49:27

響應式編程異步

2023-02-09 08:57:11

Callable異步java

2025-09-11 02:00:00

2010-04-14 16:02:09

IDF

2023-09-20 09:07:01

Java 21開發工具包

2024-09-12 15:24:29

2013-04-19 09:45:20

AMPLabHadoopHDFS

2024-09-09 14:12:38

2021-12-26 00:03:27

響應式編程異步

2025-05-09 02:00:00

代碼接口吞吐量

2024-01-19 13:42:00

模型訓練

2024-12-13 13:58:53

2025-06-13 09:12:28

2025-03-04 08:52:21

2024-11-14 15:00:00

線程架構吞吐量

2023-11-07 15:11:46

Kafka技巧

2023-08-03 14:18:29

Rust阻塞函數
點贊
收藏

51CTO技術棧公眾號

亚洲精品久久久久久无码色欲四季 | julia一区二区中文久久94| 欧美a级片免费看| 999久久精品| 在线免费一区三区| 六月婷婷激情网| 免费国产黄色片| 日本中文在线一区| 久久久国产精彩视频美女艺术照福利 | 久久久久亚洲av无码专区体验| 国产欧美三级电影| 欧美日韩精品免费观看视频| 欧美大黑帍在线播放| 每日更新av在线播放| 久久激情综合网| 高清欧美性猛交xxxx| 欧美激情aaa| 色悠久久久久综合先锋影音下载| 欧美日韩一区二区精品| 六月婷婷激情网| 成人午夜在线观看视频| 国产99久久久精品| 国产免费亚洲高清| 免费在线一级片| 成人在线一区| 亚洲精品自产拍| 日本女人性视频| 久久亚洲精品中文字幕| 日韩欧美一区视频| 国产精品视频网站在线观看| 秋霞午夜理伦电影在线观看| 久久午夜色播影院免费高清 | 精品国产一区二区三区成人影院| 欧美日韩大陆一区二区| 成人免费毛片网| av中文在线资源| 亚洲免费在线视频| 亚洲高清视频一区| 久青草国产在线| 99re66热这里只有精品3直播 | 18性欧美xxxⅹ性满足| 爱爱视频免费在线观看| 青青草综合网| 在线亚洲欧美视频| 亚洲成人黄色av| 香蕉一区二区| 亚洲精品网站在线播放gif| 亚洲精品久久一区二区三区777 | 日韩成人中文字幕在线观看| 日本高清免费在线视频| 欧美一区二区三区婷婷| 欧美日韩在线三级| 一区二区三区韩国| 亚洲va中文在线播放免费| 精品日韩视频在线观看| 2018国产在线| 九色porny自拍视频在线播放| 亚洲图片欧美色图| 成 年 人 黄 色 大 片大 全| 日本大胆在线观看| 亚洲一区二区三区影院| 蜜臀av色欲a片无码精品一区| 国产黄色大片在线观看| 亚洲一区二区三区视频在线| 久草视频国产在线| 在线观看网站免费入口在线观看国内 | 亚洲成人黄色| 精品久久国产字幕高潮| a级片在线观看视频| 欧美18xxxx| 亚洲男女自偷自拍图片另类| 麻豆av免费观看| 精品日韩在线| 久久精品国产久精国产一老狼 | 西西大胆午夜视频| 婷婷精品在线观看| 夜夜躁日日躁狠狠久久88av | 午夜精品爽啪视频| 久草青青在线观看| 久久91视频| 欧美大片在线观看一区二区| 男男做爰猛烈叫床爽爽小说 | 亚洲一区av在线播放| 又色又爽的视频| 欧美欧美天天天天操| 国产69精品久久久久久| 一级片视频免费| 国产精品91一区二区| 精品综合久久| 69av亚洲| 午夜成人免费电影| 国产野外作爱视频播放| 一区二区三区四区精品视频| 精品亚洲夜色av98在线观看| 国产一区二区三区四区在线| 午夜精品久久99蜜桃的功能介绍| 91国产视频在线播放| 亚洲自拍第二页| a级高清视频欧美日韩| 视频一区二区在线观看| 高h视频在线播放| 欧美性猛交xxxx黑人交| 波多野吉衣在线视频| 欧美精品一区二区久久| 欧美激情视频网| 亚洲精品无码久久久久| 成人天堂资源www在线| 亚洲v国产v| 麻豆视频在线观看免费网站黄| 欧美日韩一区二区电影| 亚洲一区二区三区综合| 亚洲国产精品91| 日韩av大片在线| 亚洲精品字幕在线观看| 国产精品人妖ts系列视频| www.av蜜桃| 精品一区二区三区中文字幕| 亚洲欧洲成视频免费观看| 免费在线看黄网址| 紧缚捆绑精品一区二区| 日本在线观看一区| 7777kkk亚洲综合欧美网站| 欧美二区三区91| 国产又粗又黄又猛| 99人久久精品视频最新地址| 99久久无色码| 日本中文字幕在线2020| 在线视频观看一区| 97人妻天天摸天天爽天天| 欧美精选一区| 亚洲一区二区免费| 九义人在线观看完整免费版电视剧| 91国内精品野花午夜精品| 亚洲精品中文字幕在线播放| 亚洲激情偷拍| 国产精品一区二区三区精品| 国产原创精品视频| 欧美美女激情18p| 1024手机在线观看你懂的| 午夜影院日韩| 欧美少妇一区| 成人免费直播| 日韩国产高清污视频在线观看| 精品少妇爆乳无码av无码专区| 国内精品伊人久久久久影院对白| 伊人久久婷婷色综合98网| 欧美xnxx| 正在播放欧美一区| 又骚又黄的视频| 中文字幕av一区 二区| 高清一区二区视频| 成人亚洲一区| 成人激情在线播放| 91精品久久| 日韩久久免费av| 国产在线综合网| 91视频一区二区| 精品一卡二卡三卡| 日韩免费久久| 亚洲a成v人在线观看| 四虎影院观看视频在线观看| 日韩欧美成人一区二区| 国产亚洲精品久久777777| 成人午夜精品一区二区三区| 国产91xxx| 伊人久久大香线蕉综合网蜜芽| 国产成人精品久久二区二区| av在线电影播放| 91精品国产美女浴室洗澡无遮挡| 国产女人18水真多毛片18精品| 国产大片一区二区| 黄色片网址在线观看| 蜜桃一区二区三区| 国产日韩欧美中文| 丝袜国产在线| 亚洲男人天堂2023| 国产一区二区三区四区视频| 亚洲乱码中文字幕| 国产精品无码电影| 欧美aaa在线| 大荫蒂性生交片| 国产麻豆一区二区三区精品视频| 国产精品色视频| 久久五月精品中文字幕| 亚洲美女又黄又爽在线观看| 一级黄色片网站| 无码av免费一区二区三区试看 | 韩国三级hd两男一女| 欧美一级久久| 最近中文字幕免费mv| 国产精品久久久久久久久久白浆| 国产精品99久久久久久久久久久久 | 亚洲成人一二三区| 色综合天天视频在线观看| 91n在线视频| 97久久人人超碰| 波多野结衣免费观看| 亚洲一区一卡| 国产av第一区| 国产精品一国产精品| av在线亚洲男人的天堂| av在线一区不卡| 久久久亚洲国产| 欧美尤物美女在线| 精品亚洲夜色av98在线观看| www.四虎在线观看| 在线视频你懂得一区| 日本一区二区免费在线观看| 国产精品国产三级国产有无不卡 | 日本韩国免费观看| 欧美高清视频在线高清观看mv色露露十八 | 亚洲一区二区三区成人在线视频精品| 一级毛片久久久| 欧美乱妇高清无乱码| 在线视频1区2区| 精品一区二区三区电影| 不卡的日韩av| 91麻豆精品国产91久久久久久| 国产成人无码一区二区在线播放| 亚洲精品第1页| 黄色录像一级片| 国产亚洲欧美色| 黄色正能量网站| 成人99免费视频| 人妻av一区二区三区| 精品亚洲成av人在线观看| 欧美黄色性生活| 奇米精品一区二区三区四区| 97xxxxx| 国产亚洲成人一区| av免费观看国产| 国产一区二区三区自拍| 狠狠精品干练久久久无码中文字幕 | 亚洲第一色中文字幕| 精品国产无码一区二区三区| 在线不卡免费av| 国产又粗又猛视频| 欧美精品视频www在线观看| 久久久久精彩视频| 色狠狠一区二区| 日韩三级一区二区| 色婷婷亚洲综合| 日本黄色中文字幕| 在线观看亚洲a| 日韩久久久久久久久久| 欧美午夜影院一区| 在线播放亚洲精品| 91麻豆精品国产91久久久久久久久| 在线免费观看一区二区| 精品视频999| 99er热精品视频| 日韩久久久久久| 六月丁香色婷婷| 日韩理论片久久| 国产三级在线| 亚洲最新av在线| 欧美另类极品| 欧美日韩国产成人在线观看| 波多野结衣在线播放| 97视频免费在线观看| 中文一区一区三区高中清不卡免费| 538国产精品一区二区免费视频| 香蕉伊大人中文在线观看| 日韩美女免费观看| 欧美日韩伦理一区二区| 3d精品h动漫啪啪一区二区| 亚洲乱码一区| 精品亚洲欧美日韩| 精品国产一区一区二区三亚瑟| 先锋影音亚洲资源| 欧美.日韩.国产.一区.二区| 久久艹国产精品| 久久国产成人| 国产三级生活片| 成人国产精品视频| 中文字幕 自拍| 亚洲天堂2016| 国产成人免费观看视频| 在线观看日韩一区| 99精品久久久久久中文字幕 | 五月香视频在线观看| 欧美高清自拍一区| 国产精品专区免费| 91影视免费在线观看| 欧美调教在线| 五月天av影院| 亚洲综合不卡| 久久6免费视频| 91亚洲精品久久久蜜桃网站| 手机看片国产日韩| 亚洲国产日日夜夜| 中文字幕+乱码+中文字幕明步| 欧美电影精品一区二区| 国产天堂在线| 久久久亚洲成人| 成人午夜888| 麻豆成人在线播放| 欧美一区亚洲| 中文字幕在线观看第三页| 国产激情视频一区二区三区欧美| 国产亚洲无码精品| 亚洲狠狠丁香婷婷综合久久久| 欧美精品韩国精品| 日韩欧美一级二级三级久久久| 久久国产精品高清一区二区三区| 欧美成人免费全部| 最新日韩一区| 久久久久久九九九九| 亚洲国产不卡| 依人在线免费视频| 91麻豆精品秘密| 免费在线一级片| 欧美日韩成人一区二区| 你懂的在线视频| 久久久久免费视频| www久久久| 日韩色妇久久av| 麻豆久久婷婷| 亚洲精品女人久久久| 亚洲综合色成人| 国产三级漂亮女教师| 在线观看久久久久久| 忘忧草在线日韩www影院| 成人三级在线| 亚洲人metart人体| 中文字幕免费高清在线| 国产午夜亚洲精品羞羞网站| 日韩三级视频在线播放| 欧美成人一区二区三区片免费| 男人天堂久久久| 国产精品夜色7777狼人| 国产一区二区三区电影在线观看 | 久久综合色婷婷| 久久激情免费视频| 日韩一区二区高清| 顶级网黄在线播放| 成人免费视频97| 亚洲v在线看| 永久av免费在线观看| 亚洲男人的天堂在线观看| 亚洲一级黄色大片| 色哟哟网站入口亚洲精品| jizz亚洲女人高潮大叫| 日韩videos| 蜜臀精品一区二区三区在线观看 | 欧美成人性生活视频| 国产日韩欧美视频在线| 日韩在线综合| 污网站在线免费| 亚洲精品国久久99热| 亚洲av永久纯肉无码精品动漫| 欧美大奶子在线| 丁香婷婷成人| 国产精品沙发午睡系列| 久久精品视频免费| 国产精品无码一区| 日韩视频在线免费观看| 成人污污www网站免费丝瓜| www.国产亚洲| www.av精品| 国产亚洲欧美在线精品| 国产一区二区三区在线看| 成人亚洲视频| 日本美女爱爱视频| 成人久久视频在线观看| 在线观看亚洲欧美| 在线视频欧美日韩| 国产不卡精品| 国内精品在线观看视频| 国产日韩欧美精品一区| 亚洲在线免费观看视频| 欧美国产日韩一区二区| 思热99re视热频这里只精品| 亚洲欧美自拍另类日韩| 亚洲六月丁香色婷婷综合久久| 亚洲乱码国产乱码精品精软件| 2020久久国产精品| 日韩精品电影| 亚洲妇熟xx妇色黄蜜桃| 午夜精品久久久久久久久久| 国产一二在线观看| 亚洲一区二区三区在线视频 | 成人免费在线视频网站| 亚洲无线视频| 谁有免费的黄色网址| 欧美一区二区高清| 色资源二区在线视频| 亚洲三区四区| 99麻豆久久久国产精品免费 | 亚洲精品一区三区三区在线观看| 正在播放91九色| 91视频免费观看| 精品人妻一区二区三区浪潮在线 | 91久久精品无码一区二区| 久久久免费电影| 日韩欧美三级| 人妻少妇精品视频一区二区三区| 欧美妇女性影城| 中国色在线日|韩| 国产福利片一区二区|