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

IO 任務與 CPU 調度藝術

系統
本文針對幾個話題對一些操作系統下關于性能指標評估的話題進行深入分析。

近期和同行談及一些操作系統下關于性能指標評估的話題,涉及一些計算機基礎的核心知識點,遂以此文針對如下幾個話題進行深入分析:

  • 為什么并發的IO任務使用多線程效率更高?
  • CPU在任務IO阻塞時發生了什么?
  • CPU切換線程的依據是什么?
  • 線程休眠有什么用?
  • 線程休眠1秒后是否會立刻拿到CPU執行權。
  • 為什么有人代碼會用到Thread.sleep(0);它的作用是什么?

一、詳解操作系統對于線程的調度

1. 操作系統的任務調度

近代CPU運算速度是非常快的,即使在多線程情況下CPU會按照操作系統的調度算法有序快速有序的執行任務,使得我們即使開個十幾個進程,肉眼上所有的進程幾乎的是并行運行的,這本質上就是CPU對應ns級別的線程任務調度切換以及人眼200ms下不會直觀感受到停頓的共同作用:

CPU執行線程時會按照任務優先級進行處理,一般而言,對于硬件產生的信號優先級都是最高的,當收到中斷信號時,CPU理應中斷手頭的任務去處理硬件中斷程序。例如:用戶鍵盤打字輸入、收取網絡數據包。

以用戶鍵盤打字輸入為例,從鍵盤輸入到CPU處理的流程為:

  • 用戶在鍵盤鍵入一個按鍵指令
  • 鍵盤給CPU發送一個中斷引腳發送一個高電平。
  • CPU執行鍵盤的中斷程序,獲取鍵盤的數據。

同理,獲取網絡數據包的執行流程為:

  • 網卡收到網線傳輸的網絡數據
  • 通過硬件電路完成數據傳輸
  • 將數據寫入到內存中的某個地址中
  • 網卡發送一個中斷信號給CPU
  • CPU響應網卡中斷程序,從內存中讀取數據

了解網絡數據包獲取流程整個流程后,不知道讀者是否發現,網卡讀取數據期間CPU似乎無需參與工作的,那么操作系統是如何處理這期間的任務調度呢?

2. IO阻塞的線程會如何避免CPU資源占用

操作系統為了支持多任務,將任務分為了運行、等待、就緒等幾種狀態,對于運行狀態的任務,操作系統會將其放到工作隊列中。CPU按照操作系統的調度算法按需執行工作隊列中的任務。

需要注意的是,這些任務能夠被CPU時間片完整執行的前提是任務不會發生阻塞。一旦任務或是讀取本地文件或者發起網絡IO等原因發起阻塞,這些線程任務就會被放到等待隊列中,就下圖所有的收取網絡數據包,在網卡讀取數據并寫入到內存這期間,該任務就是在等待隊列中完成的。 只有這些IO任務接受到了完整的數據并通過中斷程序發送信號給CPU,操作系統才會將其放到工作隊列中,讓CPU讀取數據。

這也就是IO阻塞避免CPU資源消耗的原因,即在IO阻塞態時,CPU會將這些任務掛起切換執行其它任務,等其IO數據準備就緒并發起中斷信號時,再回頭處理這些任務。

3. 用一個實例了解網絡收包的過程

對于上述問題,我們不妨看一段這樣的代碼,功能很簡單,服務端開啟9009端口獲取客戶端輸入的信息。

服務端代碼如下,邏輯也很清晰,執行步驟為:

  • 創建ServerSocket 服務器。
  • 綁定端口。
  • 阻塞監聽等待客戶端連接。
  • 處理客戶端發送的數據。
  • 回復數據給客戶端。
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = null;

        try {
            // 創建服務器 Socket 并綁定 9009 端口
            serverSocket = new ServerSocket(9009);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 9009.");
            System.exit(1);
        }

        Socket clientSocket = null;
        System.out.println("Waiting for connection...");

        try {
            // 等待客戶端連接
            clientSocket = serverSocket.accept();
            System.out.println("Connection successful!");
        } catch (IOException e) {
            System.err.println("Accept failed.");
            System.exit(1);
        }

        //輸出流
        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

        //輸入流
        BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        String inputLine;

        while ((inputLine = in.readLine()) != null) { // 不斷讀取客戶端發送的消息
            System.out.println("Client: " + inputLine);
            out.println("Server: Welcome to the server!"); // 向客戶端發送歡迎消息
        }

        out.close();
        in.close();
        clientSocket.close();
        serverSocket.close();
    }
}

客戶端代碼示例如下,執行步驟為:

  • 連接服務端。
  • 輸入要發送的數據。
  • 發送數據。
  • 獲取響應。
public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            socket = new Socket("localhost", 8080); // 連接到服務器
            out = new PrintWriter(socket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Unknown host: localhost.");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: localhost.");
            System.exit(1);
        }

        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        String userInput;

        while ((userInput = stdIn.readLine()) != null) { // 不斷從控制臺讀取用戶輸入
            out.println(userInput); // 向服務器發送消息
            System.out.println("Server: " + in.readLine()); // 從服務器讀取消息并打印到控制臺
        }

        out.close();
        in.close();
        stdIn.close();
        socket.close();
    }
}

啟動服務端,我們會看到這樣一段輸出:

Waiting for connection...

并通過客戶端發送字符串hello world,服務端的輸出結果如下:

Waiting for connection...
Connection successful!
Client: hello world

了解整個流程之后,我們再對細節進行分析。對于服務端的每一個步驟,CPU對應做法如下:

(1) new ServerSocket(9009) 新建由文件系統管理的Socket對象,并綁定9009端口。

(2) serverSocket.accept();阻塞監聽等待客戶端連接,此時CPU就會將其放到等待隊列中,去處理其他線程任務。

(3) 客戶端發起連接后,服務端網卡收到客戶端請求連接,通過中斷程序發出信號,CPU收到中斷信號后掛起當前執行的線程去響應連接請求。

(4) 服務端建立連接成功,輸出Connection successful!

(5) in.readLine()阻塞獲取用戶發送數據,CPU再次將其放到等待隊列中,處理其他非阻塞的線程任務。

(6) 客戶端發送數據,網卡接收并將其存放到內存中,通過中斷程序發出信號,CPU收到中斷信號后掛起當前執行的線程去讀取響應數據。

(7) 重復5、6兩步。

二、CPU如何處理任務優先級分配

上文我們提到過CPU會按照某種調度算法執行進程任務,這里的算法大致分為兩種:

  • 搶占式
  • 非搶占式

先來說說搶占式算法,典型實現就是Windows系統,它會在調度前計算每一個線程的優先級,然后按照優先級執行任務,執行任務直到執行到線程主動掛起釋放執行權或者CPU察覺到該線程霸占CPU執行時間過長將其強行掛起。 此后會再次重新計算一次優先級,在這期間,那些等待很久的線程優先級就會被大大提高,然后CPU再次找出優先級最高的線程任務執行。 之所以我們稱這種算法為搶占式,是因為每次進行重新分配時不一定是公平的。假設線程1第一次執行到期后,CPU重新計算優先級,結果發現還是線程1優先級最高,那么線程1依然會再次獲得CPU執行權,這就導致其他線程一直沒有執行的機會,極可能出現線程饑餓的情況。

Unix操作系統用的就是非搶占式調度算法,即時間分片算法,它會將時間平均切片,每一個進程都會得到一個平均的執行時間,只有任務執行完分片算法分配的時間或者在執行期間發生阻塞,CPU才會切換到下一個線程執行。因為時間分片是平均的,所以分片算法可以保證盡可能的公平。

三、詳解Java中的阻塞方法Thread.sleep()

1. Thread.sleep()如何優化搶占式調度的饑餓問題

上文提到搶占式算法可能導致線程饑餓的問題,所以我們是否有什么辦法讓長時間霸占CPU的線程主動讓CPU重新計算一次優先級呢? 答案就是Thread.sleep()方法,通過該方法就相當于對當前線程任務的一次洗牌,它會讓當前線程休眠進入等待隊列,此時CPU就會重新計算任務優先級。這樣一來那些因為長時間等待使得優先級被拔高的線程就會被CPU優先處理了:

2. RocketMQ中關于Thread.sleep(0)的經典案例

對應代碼如下可以看到在RocketMQ這個大循環中,處理一些刷盤的操作,該因為是大循環,且涉及數據來回傳輸等操作,所以循環期間勢必會創建大量的垃圾對象。

所以代碼中有個if判斷調用了Thread.sleep(0),作用如上所說,假設運行Java程序的操作系統采用搶占式調度算法,可能會出現以下流程:

  • 大循環長時間霸占CPU導致處理GC任務的線程遲遲無法工作。
  • 循環結束后堆內存中出現大量因為刷盤等業務操作留下的垃圾對象。
  • 等待長時間后,操作系統重新進行一次CPU競爭,假設此時等待已久的處理GC任務的線程優先級最高,于是執行權分配給了GC線程。
  • 因為堆內存垃圾太多,導致長時間的GC。

所以設計者們考慮到這一點,這在循環內部每一個小節點時調用Thread.sleep(),確保每執行一小段時間執行讓操作系統進行一次CPU競爭,讓GC線程盡可能多執行,做到垃圾回收的削峰填谷,避免后續出現一次長時間的GC時間導致STW進而阻塞業務線程的運行。

for (int i = 0, j = 0; i < this.fileSize; i += MappedFile.OS_PAGE_SIZE, j++) {
        byteBuffer.put(i, (byte) 0);
        // force flush when flush disk type is sync
        if (type == FlushDiskType.SYNC_FLUSH) {
            if ((i / OS_PAGE_SIZE) - (flush / OS_PAGE_SIZE) >= pages) {
                flush = i;
                mappedByteBuffer.force();
            }
        }

        // prevent gc
        if (j % 1000 == 0) {
            log.info("j={}, costTime={}", j, System.currentTimeMillis() - time);
            time = System.currentTimeMillis();
            try {
                Thread.sleep(0);
            } catch (InterruptedException e) {
                log.error("Interrupted", e);
            }
        }
 }

那為什么設計者們不使用Thread.sleep()而是調用Thread.sleep(0)方法呢?原因如下:

  • 調用sleep方法僅僅是為了讓操作系統重新進行一次CPU競爭,并不是為了掛起當前線程。
  • 并不是每次sleep都需要垃圾回收,設置為0可以確保當前大循環的線程讓出CPU執行權并休眠0s,即一讓出CPU時間片就參與CPU下一次執行權的競爭。

不得不說RocketMQ的設計們對于編碼的功力是非常深厚的。

四、小結

到此為止,我們了解的操作系統對于CPU執行線程任務的調度流程,回到我們文章開頭提出的幾個問題:

(1) 為什么并發的IO任務使用多線程效率更高?

答:IO阻塞的任務會讓出CPU時間片,自行處理IO請求,確保操作系統盡可能榨取CPU利用率。

(2) CPU在任務IO阻塞時發生了什么?

答:將任務放入等待隊列,并切換到下一個要執行的線程中。

(3) CPU切換線程的依據是什么?

答:有可能是分配給線程的時間片到期了,有可能是因為線程阻塞,還有可能因為線程霸占CPU太久了(針對搶占式算法)

(4) 線程休眠有什么用?

答:以搶占式算法為例,線程休眠會將當前任務存入等待隊列,并讓CPU重新計算任務優先級,選出當前最高優先級的任務。

(5) 線程休眠1秒后是否會立刻拿到CPU執行權。

答:不一定,CPU會按照調度算法執行任務,這個不能一概而論。

(6) 為什么有人代碼會用到`Thread.sleep(0);`它的作用是什么?

答:讓當前線程讓出CPU執行權,所有線程重新進行一次CPU競爭,優先級高的獲取CPU執行權。

責任編輯:趙寧寧 來源: 寫代碼的SharkChili
相關推薦

2019-06-29 14:34:27

磁盤IO排序

2019-09-17 14:31:37

磁盤排序IO

2023-05-08 16:38:46

任務調度分布式任務調度

2022-09-25 21:45:54

日志平臺

2024-10-25 09:26:56

2023-12-26 07:44:00

Spring定時調度

2013-12-17 10:15:19

OpenMP任務調度

2020-04-01 16:10:02

PythonAPScheduler調度

2021-05-13 12:00:51

cron調度任務系統運維

2023-11-16 09:30:27

系統任務

2021-05-20 09:50:20

鴻蒙HarmonyOS應用

2025-05-06 00:00:00

CPU調度算法

2020-09-29 19:20:05

鴻蒙

2023-06-26 00:14:28

Openjob分布式任務

2022-09-16 11:23:59

Python框架Celery

2009-06-19 15:20:08

Quartz任務調度Spring

2022-09-21 12:01:22

消息隊列任務隊列任務調度

2023-09-25 08:55:15

CSS設計軟件

2017-10-30 15:14:45

盤纖光纖光纜

2021-06-28 06:00:11

systemd定時器系統運維
點贊
收藏

51CTO技術棧公眾號

亚洲精品一区二区三区不卡| 国产三级在线观看完整版| 好看的中文字幕在线播放| 成人av在线资源网站| 日本高清不卡的在线| 美国黄色特级片| 天堂久久av| 欧美日韩一区二区在线播放| 亚洲一区尤物| 欧美在线 | 亚洲| 日本在线播放一区二区三区| 久久精品视频一| 日韩免费高清一区二区| jizz免费一区二区三区| 亚洲宅男天堂在线观看无病毒 | 国产精品一区二区精品视频观看| 亚洲电影第三页| 神马影院一区二区| 黄色片网站免费在线观看| 日韩国产欧美在线观看| 欧美激情一级二级| 四虎成人免费影院| 久本草在线中文字幕亚洲| 欧美视频在线播放| 国产在线青青草| av大大超碰在线| 国产日韩欧美激情| 精品无码久久久久国产| 国产丝袜在线视频| 日本sm残虐另类| 91成人国产在线观看| 翔田千里88av中文字幕| 欧美精品一区二区三区中文字幕| 日韩欧美亚洲国产精品字幕久久久| 天天色综合天天色| 在线成人av观看| 亚洲成人精品在线观看| 色中文字幕在线观看| 福利在线午夜| 久久久影院官网| 国产精品一区二区三区观看| 精品区在线观看| 老司机午夜精品| 国产精品爱久久久久久久| 国产一级视频在线观看| 欧美精品成人| 欧美xxxx14xxxxx性爽| 久久久久99精品成人| 亚洲ab电影| 亚洲精品国产拍免费91在线| 国产精品成人无码专区| 999国产精品一区| 日韩欧美在线影院| 亚洲综合123| 亚洲三级电影| 欧美一区二区不卡视频| 亚洲理论中文字幕| 日韩国产91| 欧美精品在线一区二区| 亚洲色图偷拍视频| 综合久久av| 制服视频三区第一页精品| 波多野结衣xxxx| 久久天天久久| 欧美高清激情brazzers| 亚洲欧美日韩精品一区| av国产精品| 欧美一区二区精品在线| 国产又黄又嫩又滑又白| 亚洲精品一区在线| 精品日韩欧美一区二区| 精品视频站长推荐| 亚洲肉体裸体xxxx137| 亚洲欧洲自拍偷拍| 亚洲精品国产精品国自| 亚洲欧洲美洲一区二区三区| 欧美大片在线看| www.av麻豆| 日韩精品福利网| 国产欧美亚洲精品| av在线亚洲天堂| 成人av电影免费在线播放| 久久久久久九九九九| 粉嫩一区二区三区国产精品| 国产精品灌醉下药二区| 国产高清不卡无码视频| 精精国产xxx在线视频app| 色婷婷精品久久二区二区蜜臂av| 亚洲色图久久久| 亚洲国产视频二区| 日韩精品视频在线播放| 天堂av网手机版| 合欧美一区二区三区| 欧洲日本亚洲国产区| 91久久精品国产91性色69| 丁香六月久久综合狠狠色| 欧美高清一区二区| 成人日日夜夜| 欧美日韩国产一区在线| 欧美日韩中文不卡| 成人午夜网址| 一区二区中文字幕| 精品无码免费视频| 免费看黄色91| 国产精品一区视频网站| 91xxx在线观看| 午夜精品久久久久久久蜜桃app| 手机看片福利盒子久久| 成人福利免费在线观看| 日韩中文视频免费在线观看| 日韩av免费网址| 国模少妇一区二区三区| 久久久亚洲综合网站| 国产精品扒开做爽爽爽的视频| 婷婷六月综合亚洲| 性久久久久久久久久久久久久| 日本妇女一区| 欧美日韩高清区| 在线中文字幕网站| 91网站最新网址| 国产高清www| 亚洲爽爆av| 在线视频精品一| 天堂网av手机版| 国产一区二区三区蝌蚪| 午夜免费电影一区在线观看| 男女羞羞在线观看| 日韩欧美中文一区| 侵犯稚嫩小箩莉h文系列小说| 久久婷婷激情| 精品久久久久久一区| 中文字幕中文字幕在线中高清免费版 | 亚洲免费网站| 96成人在线视频| 麻豆网站在线看| 欧美综合在线视频| 熟女少妇一区二区三区| 91久久黄色| 99久久伊人精品影院| www.久久久久.com| 在线综合视频播放| 国产成人在线网址| 蜜桃久久精品一区二区| 日本一区二区精品视频| 欧美电影免费观看网站| 亚洲美女www午夜| 在线看成人av| 97精品电影院| 国产亚洲精品网站| 五月国产精品| 欧美一级片一区| 欧美黄色小说| 在线观看一区二区视频| 中国女人特级毛片| 日韩电影在线一区二区| 亚洲欧洲精品在线观看| 欧美日韩精品一区二区三区视频| 亚洲视频在线观看| 91青青草视频| 国产欧美精品一区aⅴ影院| 午夜视频在线瓜伦| 欧美中文一区二区| 成人免费网站在线观看| 里番在线观看网站| 欧美一区二区三区在线观看| 欧美日韩一级在线观看| www.欧美日韩| 成人久久久久久久久| 国产99久久久国产精品成人免费| 国产成人在线视频| 3d成人动漫在线| 欧美精品欧美精品系列| 国模无码国产精品视频| 成人晚上爱看视频| 18禁男女爽爽爽午夜网站免费| 一区三区在线欧| 国产精品视频999| 国产福利视频在线观看| 日韩欧美成人一区| 青青草免费观看视频| 国产欧美一区二区精品婷婷| 一区二区三区欧美精品| 一区视频在线看| 欧美日韩中文国产一区发布| 国产免费av国片精品草莓男男| 欧美大片在线影院| 久久精品蜜桃| 日韩一二在线观看| 国产成人精品一区二三区| 国产婷婷一区二区| 国产xxxxhd| 亚洲在线黄色| 91视频成人免费| 亚洲丝袜啪啪| 亚洲一区亚洲二区| xx欧美视频| 理论片在线不卡免费观看| 天堂av资源在线| 欧美日韩一级片在线观看| 国产99精品一区| 亚洲国产高潮在线观看| 日日夜夜狠狠操| 亚洲女厕所小便bbb| 成人无码www在线看免费| 久久国产精品99久久久久久老狼| 99热亚洲精品| 999国产精品| 六十路精品视频| 成人精品视频在线观看| 欧洲永久精品大片ww免费漫画| 黄色网页在线看| 亚洲色图色老头| 亚洲乱码精品久久久久..| 欧美性猛交xxxx乱大交退制版| 久久久香蕉视频| 日本一区二区不卡视频| 白嫩情侣偷拍呻吟刺激 | 国产精品日日摸夜夜摸av| 精品伦一区二区三区| 久久国产精品无码网站| 久久国产成人精品国产成人亚洲| 综合亚洲视频| 亚洲欧美精品| 国产成人1区| 国产精选一区二区| 另类视频一区二区三区| 国产精品中文久久久久久久| 中文字幕高清在线播放| 久久久久久久久久久免费 | 欧美高清在线精品一区| 大地资源二中文在线影视观看 | 午夜视频在线免费观看| 日韩精品视频在线免费观看| www三级免费| 666欧美在线视频| 亚洲综合网av| 欧美自拍丝袜亚洲| 日本中文字幕在线观看视频| 精品成人久久av| 日韩激情在线播放| 亚洲大片免费看| 久久精品www| 一区二区三区日本| 欧美人禽zoz0强交| 亚洲日本乱码在线观看| 顶臀精品视频www| 亚洲欧美乱综合| 精品国产视频一区二区三区| 国产精品国产馆在线真实露脸| 欧美精品日韩在线| 国产精品免费免费| 福利视频第一页| 1区2区3区精品视频| 成人免费精品动漫网站| 自拍偷拍欧美精品| 在线观看成人毛片| 一区二区久久久| 精品深夜av无码一区二区老年| 亚洲高清免费在线| 日韩福利片在线观看| 黑人巨大精品欧美一区二区免费| www.国产com| 欧美吻胸吃奶大尺度电影 | 日本vs亚洲vs韩国一区三区二区| 亚洲无吗一区二区三区| 老司机午夜精品| 久久久久久久久久久影视| 福利一区二区在线观看| 亚洲天堂资源在线| 久久久久久久久岛国免费| 一级片久久久久| 亚洲人精品午夜| 99视频在线看| 91国偷自产一区二区三区观看| 怡红院男人天堂| 欧美一级日韩不卡播放免费| 成人久久久精品国产乱码一区二区| 亚洲国产中文字幕在线观看| 青梅竹马是消防员在线| 中文字幕在线成人| 91高清在线观看视频| 午夜精品三级视频福利| 怡红院成人在线| 91在线视频九色| 欧美三级电影在线| 天天久久人人| 欧美视频四区| 国产无套粉嫩白浆内谢的出处| 国产原创一区二区三区| 中国av免费看| 亚洲手机成人高清视频| xxxxxx国产| 欧美日韩一区二区三区高清| 欧美熟妇乱码在线一区| 中文字幕免费国产精品| 污污视频在线| 国产成人精品久久亚洲高清不卡| 国内不卡的一区二区三区中文字幕| 国产精选一区二区| 欧美大黑bbbbbbbbb在线| 久久久久99精品成人片| 青草国产精品久久久久久| 国产精品一区二区无码对白| 中文字幕巨乱亚洲| 国产无遮挡又黄又爽又色| 欧美日韩1区2区| 天天操天天操天天干| 久久精品91久久久久久再现| 牛牛精品一区二区| 99c视频在线| 日韩一区欧美| 超碰97人人射妻| 国产成人一级电影| 久久久国产一级片| 欧美午夜激情视频| 国产黄色片免费| www.久久色.com| 人人鲁人人莫人人爱精品| 国产精品免费一区二区| 我不卡伦不卡影院| 色多多视频在线播放| 91日韩精品一区| 久久免费黄色网址| 91精品国产综合久久久久久久| 欧美日本韩国一区二区| 韩国福利视频一区| 精品一区二区三区中文字幕| 亚洲欧洲日韩综合二区| 三级欧美韩日大片在线看| 黄色av网址在线观看| 亚洲一区在线观看免费观看电影高清 | 亚洲第一综合色| 国产成人三级一区二区在线观看一| 在线日韩av观看| 欧美成a人片在线观看久| 精品九九九九| 亚洲激情女人| 丰满熟女人妻一区二区三区| 亚洲精品乱码久久久久久| 国产精品九九九九| 日韩视频精品在线| 久久女人天堂| 中文字幕一区二区三区精彩视频| 日韩成人免费电影| 老熟妇一区二区| 欧美亚洲一区二区三区四区| 国产小视频福利在线| 日韩av观看网址| 国产亚洲电影| 国产理论在线播放| 欧美激情一区三区| 亚洲一区中文字幕永久在线| 中文字幕欧美日韩| 欧美日韩免费电影| 在线观看亚洲视频啊啊啊啊| 麻豆91在线观看| 我要看黄色一级片| 精品少妇一区二区三区在线播放| free性欧美| 蜜桃麻豆www久久国产精品| 丝袜美腿一区二区三区| 国产精品久久久久无码av色戒| 91久久精品午夜一区二区| aaa日本高清在线播放免费观看| 国产精品无av码在线观看| 欧美电影一区| 女女调教被c哭捆绑喷水百合| 亚洲一区二区三区自拍| 天天干天天干天天干| 欧美一区视频在线| 日本一区二区高清不卡| 极品粉嫩美女露脸啪啪| 一区二区三区四区蜜桃| 熟妇高潮一区二区高潮| 国产精品69av| 亚洲情侣在线| 日本一卡二卡在线| 日本精品一区二区三区高清| 天堂中文а√在线| 97人人干人人| 亚洲永久在线| 日日噜噜夜夜狠狠久久波多野| 亚洲第一在线视频| 88xx成人永久免费观看| 中文字幕在线乱| 97成人超碰视| 中文字幕一区二区三区波野结| 欧美成人精品不卡视频在线观看| 国产劲爆久久| 婷婷丁香激情网| 亚洲永久精品国产| 国产高清在线| 国产99在线播放| 日韩va亚洲va欧美va久久| 破处女黄色一级片| 亚洲美女av网站| 狂野欧美xxxx韩国少妇| 超碰97人人射妻| 亚洲一区二区三区视频在线| 国产69精品久久app免费版|