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

阿里社招二面:談談你對JUC 中 AQS的理解,用了什么設計模式?為什么它是鎖的靈魂?

開發 前端
在 Java 中,鎖大多都是通過管程來實現的,比如大家熟悉的 Synchronized、AQS。這里先通過信號量、管程的對比幫助大家開始了解 AQS 的設計。

信號量和管程

在并發編程領域有幾個核心概念:

  • 互斥:只有一個線程能訪問臨界區。
  • 臨界資源:多個線程可以共享系統中的資源,但是臨界資源在同一時刻只允許一個線程訪問。
  • 臨界區:訪問臨界資源的代碼即臨界區。

管程和信號量是操作系統中實現并發編程的兩種重要技術。

  • 信號量:是一種低級的同步工具,是一個計數器,用于控制對共享資源的訪問。信號量的值表示可用的資源數量。

主要包含共享變量 S、P 操作(申請資源)和 V 操作(釋放資源)。P 操作會使 S 值減一,當 S 值為負時,表示沒有資源可操作,此時要進入等待隊列;V 操作會使信號量的值加一,并喚醒等待隊列中的線程。

  • 管程:為了解決信號量在臨界區的 PV 操作上的配對的麻煩而提出的并發編程方法,使用條件變量等同步機制來實現線程之間的協作。

MESA 模型的 wait()是進入條件變量的等待隊列,當被 notify()或者 notifyAll()喚醒,會從條件變量等待隊列進入入口等待隊列。

小白:等等,什么是條件變量等待隊列呀?

打個比方,你去醫院看病,就診過程醫生先讓你去拍個 CT,于是你就去拍 CT 的隊列(條件隊列)排隊了,這時醫生可以給其他病人(線程)就診,那當你拍完 CT 拿到結果后(滿足條件變量)回來給醫生看,不是立馬執行,而是需要先進入入口等待隊列里面,等待醫生給你看結果。

而這個場景下如果用信號量實現,那會比較復雜,而且如果用不好,還會有死鎖的問題。

在 Java 中,鎖大多都是通過管程來實現的,比如大家熟悉的 Synchronized、AQS。這里先通過信號量、管程的對比幫助大家開始了解 AQS 的設計。

AQS 實現原理

Java 并發編程核心在于 java.cocurrent.util 包,而 juc 里面大多同步器的實現都有共同的特點:等待隊列、條件隊列、獨占獲取、共享獲取等,那么這個場景很容易就讓我們想到用模板方法的設計模式來實現。

在 AQS 中實現了鎖的獲取釋放框架,實際邏輯由子類去實現,而核心的隊列入隊出隊操作在 AQS 父類抽象出來,正是基于這種抽象變與不變的思想,AQS 定義了一套多線程并發編程的抽象框架。

AQS 核心特性。

我們再來看下 AQS 的基本結構,它維護了一個共享資源 state 和一個 FIFO 的等待隊列,底層通過 CAS 機制保證了操作的原子性。

上文講過,AQS 是基于 MESA 模型實現的,所以在 AQS 中有兩種隊列:

  1. 同步等待隊列:AQS 的同步等待隊列也稱為 CLH 隊列,主要是 Craig、Landin、Hagersten 這三位大佬發明的一種基于雙向鏈表數據結構的隊列,是 FIFO 先入先出等待隊列。

  1. 條件等待隊列:Condition 是一個多線程間協調通信的工具,主要使某些線程一起等待某個條件,等具備該條件時,這些線程會被喚醒,從而進去等待隊列中爭奪鎖資源。

AQS 還定義了兩種資源獲取方式:

  1. Exclusive-獨占,只有一個線程能執行成功,如 ReentrantLock。
  2. Share-共享,多個線程可以同時執行成功,如 Semaphore/CountDownLatch,當然還有讀寫鎖的讀鎖,因為不涉及數據一致性問題,也是通過共享模式獲取資源。

在 AQS 中,不同場景下,不同的同步器爭搶資源的方式不同,但是不同的同步器只需要共享資源 state 的獲取和釋放方法即可,至于線程等待隊列的維護(比如入隊/喚醒出隊)在 AQS 頂層已實現好,如果你要自定義一個同步器,通常需要實現以下幾個方法:

  • isHeldExclusively:該線程是否正在獨占資源
  • tryAcquire(int):獨占方法。嘗試獲取資源,成功返回 true,失敗返回 false。
  • tryRelease(int):獨占方法。嘗試釋放資源,成功返回 true,失敗返回 false。
  • tryAcquireShared(int):獨占方法。嘗試獲取資源,負數表示失敗,大于等于 0 表示成功。
  • tryReleaseShared(int):獨占方法。嘗試釋放資源,如果釋放后允許喚醒后續等待節點返回 true,否則返回 false。

那么,你知道 JUC 中不同鎖/同步器都是怎么實現的嗎?

AQS 源碼分析

ReentrantLock 是我們經常使用到一種鎖,下面我們以它為例子,分析它是如何實現獲取和釋放鎖資源的,一起來揭開 AQS 的神秘面紗。

我們都知道 ReentrantLock 是獨占鎖,有公平和非公平鎖兩種模式。

什么是公平和非公平鎖?

  • 公平鎖:指多個線程按照申請鎖的順序來獲取鎖,即按照線程的先后順序排隊獲取鎖。當一個線程釋放鎖后,等待時間最長的線程會獲得鎖的訪問權,保證每個線程都有機會獲取到鎖,避免饑餓現象的發生。
  • 非公平鎖:指多個線程獲取鎖的順序是不確定的,不按照申請鎖的順序排隊。一個線程在等待鎖時,有可能在其他線程釋放鎖后立即獲取鎖,允許某些線程相對于其他線程具有更高的獲取鎖的機會。

我們先來看下 ReentrantLock 相關核心類的關系。

FairSync 和 NoneFairSync 是 ReentrantLock 實現的內部類,ReentrantLock 公平鎖和非公平鎖就是通過它們來實現的。

lock

然后再來看下 lock()方法的流程。

由上面可看出,ReentrantLock 實現的公平鎖、非公平鎖唯一的區別在于,非公平鎖在一開始調用獲取資源方式時,就直接嘗試獲取鎖,不會判斷等待隊列是否有線程在等待,獲取不到時,再把線程添加到等待隊列中。

小白:我有個問題,把線程節點添加到隊列尾部后,為啥還要調用 acquireQueued 方法判斷是否要掛起呀?

這個問題提得好,我們先來思考下,假設在線程獲取鎖資源失敗把線程節點添加到隊列中直接就掛起阻塞,意味著線程運行狀態轉換為阻塞,會帶來 CPU 從用戶態與內核態之間轉換的兩次操作(阻塞和喚醒),特別在并發場景下,這種切換會帶來較大的性能開銷,所以 AQS 在入隊時首先會讓線程通過自旋的方式來等待競爭鎖。

小白:那么這里 acquireQueued 方法是如何實現的呢?

先看下核心源碼。

final boolean acquireQueued(final Node node, int arg) {
        // 獲取鎖資源標識
        boolean failed = true;
        try {
            boolean interrupted = false;
            // 自旋
            for (;;) {
                // 獲取當前節點的前驅節點
                final Node p = node.predecessor();
                // 當前節點的前驅節點為頭節點,并獲取鎖資源成功
                if (p == head && tryAcquire(arg)) {
                    //把當前節點設置為頭節點
                    setHead(node);
                    // 原頭節點的下節點指向設置為null,方便GC回收
                    p.next = null; // help GC
                    // 設置鎖資源獲取成功
                    failed = false;
                    return interrupted;
                }
                // 如果當前節點不是head的下一節點/獲取鎖資源失敗,嘗試掛起線程
                if (shouldParkAfterFailedAcquire(p, node) &&
                    parkAndCheckInterrupt())
                    interrupted = true;
            }
        } finally {
            if (failed)
                cancelAcquire(node);
        }
    }

通過源碼,我們發現它主要是根據上一節點的狀態來判斷是否需要掛起,那么我們先看下 Node 有哪幾個狀態。

  • CANCELLED:1,線程已被取消。
  • SIGNAL:-1,等待隊列中存在待被喚醒的掛起線程。
  • CONDITION:-2,當前線程在 Condition 隊列中,未在 AQS 隊列中。
  • PROPAGATE:-3,表示后續結點會傳播喚醒的操作,共享模式下起作用。

通過流程圖分析。

以上就是獲取鎖的全部流程啦,怎么樣,通過流程圖分析后是不是覺得很簡單呢。

小白:嗯嗯,我還有一個疑問,為什么 acquireQueued 方法里面還要判斷線程是否中斷呢?

嗯不錯,你看得很細,一般線程中斷可以按中斷時線程狀態分為兩種:1、運行時中斷;2、阻塞或等待線程中斷。一般有中斷時,運行時的線程會在某個取消點中斷執行,其實這也可以理解,因為如果立刻中斷,那么容易造成對象狀態不一致的情況發生。而阻塞或等待狀態的線程大多會立即響應中斷。

但是 JUC 中獲取獨占鎖的阻塞狀態不會立即響應中斷,這里在 acquireQueued 方法中對線程的中斷狀態判斷,如果中斷了返回 true,執行 selfInterrupt 方法進入中斷狀態,但注意是在獲取鎖之后,在獲取到鎖之前是不會做出響應的。

unLock

看完了 lock 方法,我們再來看下 unlock 釋放資源的實現,ReentrantLock 實際調用的是 AQS 的 release 方法。

核心代碼:

public final boolean release(int arg) {
        //嘗試釋放鎖,返回鎖資源的計數值
        if (tryRelease(arg)) {
            //獲取等待隊列頭節點
            Node h = head;
            if (h != null && h.waitStatus != 0)
                //喚醒等待隊列中待喚醒的節點
                unparkSuccessor(h);
            //表示完全釋放鎖資源
            return true;
        }
        //表示未完全釋放鎖資源
        return false;
    }

進去 release 方法,發現實際調用的還是 ReentrantLock 自己實現的 tryRelease 方法。

protected final boolean tryRelease(int releases) {
        //修改AQS的state
        int c = getState() - releases;
        //當前線程不是持有鎖線程,拋出異常
        if (Thread.currentThread() != getExclusiveOwnerThread())
            throw new IllegalMonitorStateException();
        //是否完全釋放鎖資源標識
        boolean free = false;
        if (c == 0) {
            //修改標識,表示完全釋放
            free = true;
            //將占用鎖資源的屬性設置為null
            setExclusiveOwnerThread(null);
        }
        //設置state值
        setState(c);
        //為true表示當前線程完全釋放資源
        //為false表示當前線程未完全釋放
        return free;
    }

以上就是釋放資源的實現原理。

好了,通過對 ReentrantLock 的實現分析完后,你對 AQS 底層的原理是不是了解得更多了呢?那么你知道怎么學習其他同步器都是如何實現的了嗎?

最后,我們再看來看一個問題,為什么 AQS 要使用雙向鏈表呢?

首先,我們來看下雙向鏈表的特點,雙向鏈表有兩個指針,一個指針指向前置節點,一個指針指向后繼節點,因此可以快速找到前置節點。雙向鏈表支持在兩端進行高效的操作,尾部添加新節點,頭部移除節點。可以保證先進先出的順序,實現一定的公平性。

AQS 在多個地方需要獲取前置節點的信息,比如在入隊時需要判斷前置節點的狀態來決定是否阻塞;

在線程自旋阻塞時,只有頭節點的下一節點才需要競爭鎖,否則全部都去爭搶會造成羊群效應,為了避免這個問題,加入到鏈表的節點在爭搶鎖之前需要判斷前置節點是否頭節點。

而在單向鏈表中,去查找前置節點的效率顯然比雙向鏈表低很多。

擴展:CountDownLatch 是如何實現的呢?

責任編輯:姜華 來源: 碼哥跳動
相關推薦

2025-03-07 00:11:00

JWTJSONSession

2023-11-28 12:25:02

多線程安全

2022-06-30 09:10:33

NoSQLHBaseRedis

2021-10-27 20:54:24

分庫分表高并發

2022-10-18 08:38:16

內存泄漏線程

2024-09-29 09:50:05

2022-09-06 11:13:16

接口PipelineHandler

2021-04-25 09:58:48

mmapJava面試

2025-01-13 09:24:32

2022-09-19 07:57:59

云服務互聯網基礎設施

2021-03-17 15:54:32

IO零拷貝方式

2024-03-22 13:31:00

線程策略線程池

2024-09-20 05:46:00

2024-09-11 16:49:55

2024-11-01 16:18:52

2014-12-19 09:59:50

代碼

2024-03-15 09:06:48

HTTPSCA私鑰

2015-07-28 14:22:09

BAT

2022-09-28 16:37:59

SpringMVC框架

2024-02-04 15:53:20

C++函數編程語言
點贊
收藏

51CTO技術棧公眾號

中文字幕一区二区三区手机版 | 日本一区二区三区在线观看视频| 亚洲激情二区| 日韩精品日韩在线观看| 少妇高清精品毛片在线视频| av在线资源站| 国产成人免费视频网站| 欧美亚洲视频一区二区| 男女男精品视频网站| 日本一区二区乱| av电影在线网| 国产精品99久久| 精品国产免费视频| 国产wwwxx| 欧美巨大xxxx做受沙滩| 91蝌蚪国产九色| 91免费人成网站在线观看18| 日韩久久精品视频| 午夜片欧美伦| 亚洲男人天堂网站| 三上悠亚 电影| 99久久婷婷国产综合精品首页 | 综合av色偷偷网| 色悠悠在线视频| 欧美天堂一区二区| 激情久久av一区av二区av三区 | 国产 中文 字幕 日韩 在线| 99国内精品久久久久| 欧美日韩日本国产| 国产肉体ⅹxxx137大胆| 在线免费观看的av网站| gogogo免费视频观看亚洲一| 成人字幕网zmw| 懂色av蜜臀av粉嫩av分享吧最新章节| 欧美日本一区二区视频在线观看| 一夜七次郎国产精品亚洲| 亚洲一区二区在线免费| 国产精品久久免费视频 | 97国产精品人人爽人人做| 欧美h片在线观看| 精品国产aⅴ| 精品亚洲一区二区三区| 久久性爱视频网站| 999久久精品| 日韩一二在线观看| 亚洲激情在线看| 国产精品videossex撒尿| 欧美视频精品一区| 日韩精品一区二区免费| 亚洲妇熟xxxx妇色黄| 亚洲视频在线一区| 一区二区三区不卡在线| av男人的天堂在线| 欧美激情一区二区三区全黄| 欧美午夜视频在线| 日韩av资源站| 久久综合给合久久狠狠狠97色69| 国产美女精品久久久| 性生交生活影碟片| 国产精品888| 99视频免费观看蜜桃视频| 国产熟女一区二区三区四区| 国产一区在线视频| 亚洲自拍小视频| 国产xxxxxx| 国产成人精品影视| 国产欧美一区二区三区另类精品| 隣の若妻さん波多野结衣| 成人av在线网站| 精品国产一区二区三区免费| 偷拍25位美女撒尿视频在线观看| 97精品久久久久中文字幕| 精选一区二区三区四区五区| 午夜福利理论片在线观看| 99re成人在线| 日本一区高清不卡| 91视频在线观看| 综合av第一页| 久久av综合网| 在线毛片观看| 欧美亚洲图片小说| 第一区免费在线观看| 欧美成人精品一级| 亚洲成人av中文字幕| 国产亚洲无码精品| 成人精品久久| 欧美成人免费大片| 人人干人人干人人干| 在线综合亚洲| 国产精品欧美亚洲777777| 国产美女明星三级做爰| 成人激情综合网站| 日韩欧美三级一区二区| 国产在线二区| 欧美日韩一区二区三区| 中文字幕av专区| aiss精品大尺度系列| 亚洲精选在线观看| 日韩av手机在线免费观看| 激情婷婷久久| 国产精品毛片a∨一区二区三区|国| 国产绿帽一区二区三区| 99re热这里只有精品免费视频| 婷婷四房综合激情五月| 欧美性猛片xxxxx免费中国| 一本久久综合亚洲鲁鲁五月天| 亚洲色图欧美自拍| 女优一区二区三区| 欧美成人免费大片| 国产乱码在线观看| 成人夜色视频网站在线观看| 日韩中文不卡| 9999热视频在线观看| 精品视频一区二区不卡| 久久人妻一区二区| 亚洲成av人片乱码色午夜| 秋霞午夜一区二区| 性生活免费网站| 国产精品久久久99| 成人在线免费观看av| 亚洲美女色播| 亚洲天堂av综合网| 免费毛片一区二区三区| 国产自产高清不卡| 日本一区二区在线视频观看| tube8在线hd| 3atv在线一区二区三区| 国产jk精品白丝av在线观看| 在线日韩中文| 成人免费观看网站| 搞黄网站在线观看| 欧美日韩专区在线| 日韩精品电影一区二区| 99av国产精品欲麻豆| 91传媒视频在线观看| av在线中文| 在线欧美日韩精品| 亚洲AV无码国产精品| 欧美精品91| 亚洲伊人久久综合| 美女av在线播放| 欧美日韩一级黄| 永久免费毛片在线观看| 美女国产一区| 欧美重口乱码一区二区| 免费观看一级欧美片| 亚洲国产精品yw在线观看| 久久艹精品视频| 周于希免费高清在线观看| 久久国内精品视频| 日本精品二区| 日韩影片中文字幕| 亚洲视频国产视频| 无码人妻丰满熟妇精品区| 99精品久久99久久久久| 成人一区二区免费视频| 国产精品2023| 97国产精品视频人人做人人爱| www.国产欧美| 性久久久久久久久久久久| 亚洲成a人无码| 一区三区视频| 免费精品视频一区二区三区| 中文字幕在线看片| 亚洲人成在线播放| 五月激情丁香网| 国产精品久久看| 亚洲精品视频三区| 欧美成人有码| 国产一区免费视频| 亚洲精品**中文毛片| 亚洲日韩中文字幕| 中文字幕av资源| 亚洲视频一区在线观看| 69久久精品无码一区二区| 国产字幕视频一区二区| 国产中文一区二区| 新片速递亚洲合集欧美合集| 一区二区av在线| 92久久精品一区二区| 一区二区三区免费看视频| 在线天堂www在线国语对白| 乱人伦精品视频在线观看| 视频一区亚洲| 欧美电影院免费观看| 国内精品免费午夜毛片| 国产三级在线免费观看| 91精品国产品国语在线不卡| 久久精品免费在线| 国产亚洲欧洲一区高清在线观看| 色一情一区二区三区| 国内精品福利| 日韩精品伦理第一区| 国产日韩中文在线中文字幕| 91国内在线视频| 在线播放毛片| 国产精品久久久久蜜臀| 久久久精品在线观看| 黄色av免费观看| 欧美性欧美巨大黑白大战| 91视频综合网| 久久久久一区二区三区四区| 欧美在线a视频| 香蕉久久久久久久av网站| 自拍另类欧美| 蜜桃国内精品久久久久软件9| 成人网址在线观看| 韩国主播福利视频一区二区三区| 久久精品成人欧美大片| 亚洲人视频在线观看| 欧美一级黄色大片| 69av视频在线观看| 亚洲午夜av在线| 女教师淫辱の教室蜜臀av软件| www.视频一区| 巨乳女教师的诱惑| 三级亚洲高清视频| 日韩 欧美 视频| 香蕉视频官网在线观看日本一区二区| 久久久99爱| 香蕉大人久久国产成人av| 国产精品r级在线| 啊啊啊久久久| 九九热精品视频| 欧美jizzhd欧美| 亚洲老头老太hd| 丁香六月色婷婷| 欧美一区二区久久久| www.亚洲激情| 色哟哟国产精品| 久久99精品波多结衣一区| 亚洲宅男天堂在线观看无病毒| 日韩在线视频免费看| 日本一区二区免费在线观看视频| 国产精品福利导航| 白白色亚洲国产精品| 男人女人拔萝卜视频| 国产做a爰片久久毛片| 不卡的av中文字幕| 热久久一区二区| 黑人粗进入欧美aaaaa| 午夜宅男久久久| 丰满爆乳一区二区三区| 影音先锋国产精品| 97超碰人人澡| 亚洲每日更新| 日韩免费一级视频| 日韩一区二区久久| 97超碰青青草| 香蕉久久夜色精品| 国产精品宾馆在线精品酒店| 亚洲激情另类| 欧美视频在线观看网站| 亚洲精品影视| 成年人观看网站| 久久青草久久| 亚洲色图久久久| 另类人妖一区二区av| 成人日韩在线视频| 国产精品自拍三区| aaa黄色大片| 99久精品国产| 三级黄色片网站| 久久久久久99久久久精品网站| 欧美老熟妇乱大交xxxxx| 国产午夜精品美女毛片视频| 亚洲一级黄色录像| 中文字幕欧美一区| 欧美日韩一级在线观看| 亚洲国产精品一区二区久久恐怖片| 国产极品美女高潮无套嗷嗷叫酒店 | 丝袜美腿亚洲综合| 久久国产成人精品国产成人亚洲| 国产一区久久| 黄色动漫网站入口| 毛片基地黄久久久久久天堂| 97超碰免费在线观看| 99久久久国产精品| 国产精品麻豆一区| 一卡二卡三卡日韩欧美| 天堂在线免费观看视频| 欧美无砖砖区免费| 亚洲精品成av人片天堂无码| 精品亚洲男同gayvideo网站| 欧美成人三区| 国产91精品青草社区| 国精品产品一区| 成人做爰66片免费看网站| 欧美美女在线| 青青草免费在线视频观看| 一道本一区二区| 不卡的在线视频| 99久久精品国产麻豆演员表| 国产又粗又长又黄的视频| 亚洲亚洲精品在线观看| 国产精品传媒在线观看| 日韩精品一区二区三区四区 | 日韩在线国产精品| heyzo一区| 国产在线观看91精品一区| 女同一区二区三区| 二级片在线观看| 久久久久久久高潮| 俄罗斯黄色录像| 国产精品国产三级国产三级人妇| 奇米影视第四色777| 4438成人网| 免费人成在线观看网站| 欧美黄色片视频| 啪啪av大全导航福利综合导航| 九九九九精品| 亚洲综合中文| 99免费视频观看| 国产精品18久久久久| 欧美亚一区二区三区| 一区二区三区视频在线看| 中文字幕在线播| 亚洲国产精品va在线| 久久99精品久久久久久野外| 2019日本中文字幕| 亚洲一二三区视频| 午夜一区二区三区| 噜噜噜躁狠狠躁狠狠精品视频| 无码人妻少妇色欲av一区二区| 国产日本一区二区| 日本中文字幕在线免费观看| 欧美日韩国产一级二级| 国产三级在线免费观看| 久久久久久国产免费| 免费观看亚洲| 欧美国产一区二区在线| 欧美精品激情| 美女被艹视频网站| 国产精品毛片无遮挡高清| 毛片视频网站在线观看| 亚洲福利在线播放| 欧美卡一卡二| 国产欧美日韩伦理| 影音先锋日韩精品| 久久九九国产视频| 91免费视频网址| 日韩免费不卡视频| 亚洲国产精品va在线看黑人| 在线xxxx| 国产成人免费电影| 中文av一区| 国产视频在线视频| 国产欧美精品一区| 国产一区免费看| 中文字幕亚洲综合久久筱田步美| 日本不良网站在线观看| 国产精品一区二区av| 很黄很黄激情成人| 欧美性猛交xx| 性欧美疯狂xxxxbbbb| 日本黄视频在线观看| 1769国内精品视频在线播放| 国产精品对白| 国产女主播自拍| 成人免费黄色大片| 久久久久免费看| 日韩av一区二区在线观看| 91超碰在线| 欧美凹凸一区二区三区视频 | 青青在线视频免费| 国产调教视频一区| 亚洲第一区av| 欧美猛少妇色xxxxx| 亚洲精品黑牛一区二区三区| 裸体大乳女做爰69| 粉嫩av一区二区三区| 国产精品.www| 亚洲欧美日韩另类| 东京一区二区| 最新中文字幕久久| 国产一区二区电影| 加勒比婷婷色综合久久| 日韩欧美成人一区二区| 成人影院在线观看| 国产精品初高中精品久久| 亚洲最黄网站| 黄色裸体一级片| 日韩欧美黄色影院| 欧美大胆成人| 伊人婷婷久久| 99久久精品国产精品久久| 五月天婷婷久久| 日韩中文字幕免费| 日韩在线观看中文字幕| 国产www免费| 中文字幕免费在线观看视频一区| 91精品在线视频观看| 国语自产精品视频在线看抢先版图片| 色天下一区二区三区| 天堂av在线8| 欧美日韩国产黄| 欧美另类极品| 国产精品一区视频| 美女久久网站| 国产亚洲欧美精品久久久久久|