国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

手寫線程池 - C語言版

共 22250字,需瀏覽 45分鐘

 ·

2021-09-28 07:03

1. 線程池原理

我們使用線程的時候就去創(chuàng)建一個線程,這樣實現(xiàn)起來非常簡便,但是就會有一個問題:如果并發(fā)的線程數(shù)量很多,并且每個線程都是執(zhí)行一個時間很短的任務(wù)就結(jié)束了,這樣頻繁創(chuàng)建線程就會大大降低系統(tǒng)的效率,因為頻繁創(chuàng)建線程和銷毀線程需要時間。

那么有沒有一種辦法使得線程可以復(fù)用,就是執(zhí)行完一個任務(wù),并不被銷毀,而是可以繼續(xù)執(zhí)行其他的任務(wù)呢?

線程池是一種多線程處理形式,處理過程中將任務(wù)添加到隊列,然后在創(chuàng)建線程后自動啟動這些任務(wù)。線程池線程都是后臺線程。每個線程都使用默認(rèn)的堆棧大小,以默認(rèn)的優(yōu)先級運行,并處于多線程單元中。如果某個線程在托管代碼中空閑(如正在等待某個事件), 則線程池將插入另一個輔助線程來使所有處理器保持繁忙。如果所有線程池線程都始終保持繁忙,但隊列中包含掛起的工作,則線程池將在一段時間后創(chuàng)建另一個輔助線程但線程的數(shù)目永遠(yuǎn)不會超過最大值。超過最大值的線程可以排隊,但他們要等到其他線程完成后才啟動。

在各個編程語言的語種中都有線程池的概念,并且很多語言中直接提供了線程池,作為程序猿直接使用就可以了,下面給大家介紹一下線程池的實現(xiàn)原理:

線程池的組成主要分為 3 個部分,這三部分配合工作就可以得到一個完整的線程池:

  1. 任務(wù)隊列,存儲需要處理的任務(wù),由工作的線程來處理這些任務(wù)
  • 通過線程池提供的 API 函數(shù),將一個待處理的任務(wù)添加到任務(wù)隊列,或者從任務(wù)隊列中刪除
  • 已處理的任務(wù)會被從任務(wù)隊列中刪除
  • 線程池的使用者,也就是調(diào)用線程池函數(shù)往任務(wù)隊列中添加任務(wù)的線程就是生產(chǎn)者線程
  1. 工作的線程(任務(wù)隊列任務(wù)的消費者) ,N個
  • 線程池中維護了一定數(shù)量的工作線程,他們的作用是是不停的讀任務(wù)隊列,從里邊取出任務(wù)并處理
  • 工作的線程相當(dāng)于是任務(wù)隊列的消費者角色,
  • 如果任務(wù)隊列為空,工作的線程將會被阻塞 (使用條件變量 / 信號量阻塞)
  • 如果阻塞之后有了新的任務(wù),由生產(chǎn)者將阻塞解除,工作線程開始工作
  1. 管理者線程(不處理任務(wù)隊列中的任務(wù)),1個
  • 它的任務(wù)是周期性的對任務(wù)隊列中的任務(wù)數(shù)量以及處于忙狀態(tài)的工作線程個數(shù)進行檢測
  • 當(dāng)任務(wù)過多的時候,可以適當(dāng)?shù)膭?chuàng)建一些新的工作線程
  • 當(dāng)任務(wù)過少的時候,可以適當(dāng)?shù)匿N毀一些工作的線程

2. 任務(wù)隊列

// 任務(wù)結(jié)構(gòu)體
typedef struct Task
{
    void (*function)(void* arg);
    void* arg;
}Task;

3. 線程池定義

// 線程池結(jié)構(gòu)體
struct ThreadPool
{
    // 任務(wù)隊列
    Task* taskQ;
    int queueCapacity;  // 容量
    int queueSize;      // 當(dāng)前任務(wù)個數(shù)
    int queueFront;     // 隊頭 -> 取數(shù)據(jù)
    int queueRear;      // 隊尾 -> 放數(shù)據(jù)

    pthread_t managerID;    // 管理者線程ID
    pthread_t *threadIDs;   // 工作的線程ID
    int minNum;             // 最小線程數(shù)量
    int maxNum;             // 最大線程數(shù)量
    int busyNum;            // 忙的線程的個數(shù)
    int liveNum;            // 存活的線程的個數(shù)
    int exitNum;            // 要銷毀的線程個數(shù)
    pthread_mutex_t mutexPool;  // 鎖整個的線程池
    pthread_mutex_t mutexBusy;  // 鎖busyNum變量
    pthread_cond_t notFull;     // 任務(wù)隊列是不是滿了
    pthread_cond_t notEmpty;    // 任務(wù)隊列是不是空了

    int shutdown;           // 是不是要銷毀線程池, 銷毀為1, 不銷毀為0
};

4. 頭文件聲明

#ifndef _THREADPOOL_H
#define _THREADPOOL_H

typedef struct ThreadPool ThreadPool;
// 創(chuàng)建線程池并初始化
ThreadPool *threadPoolCreate(int min, int max, int queueSize);

// 銷毀線程池
int threadPoolDestroy(ThreadPool* pool);

// 給線程池添加任務(wù)
void threadPoolAdd(ThreadPool* pool, void(*func)(void*), void* arg);

// 獲取線程池中工作的線程的個數(shù)
int threadPoolBusyNum(ThreadPool* pool);

// 獲取線程池中活著的線程的個數(shù)
int threadPoolAliveNum(ThreadPool* pool);

//////////////////////
// 工作的線程(消費者線程)任務(wù)函數(shù)
void* worker(void* arg);
// 管理者線程任務(wù)函數(shù)
void* manager(void* arg);
// 單個線程退出
void threadExit(ThreadPool* pool);
#endif  // _THREADPOOL_H

5. 源文件定義

ThreadPool* threadPoolCreate(int min, int max, int queueSize)
{
    ThreadPool* pool = (ThreadPool*)malloc(sizeof(ThreadPool));
    do 
    {
        if (pool == NULL)
        {
            printf("malloc threadpool fail...\n");
            break;
        }

        pool->threadIDs = (pthread_t*)malloc(sizeof(pthread_t) * max);
        if (pool->threadIDs == NULL)
        {
            printf("malloc threadIDs fail...\n");
            break;
        }
        memset(pool->threadIDs, 0, sizeof(pthread_t) * max);
        pool->minNum = min;
        pool->maxNum = max;
        pool->busyNum = 0;
        pool->liveNum = min;    // 和最小個數(shù)相等
        pool->exitNum = 0;

        if (pthread_mutex_init(&pool->mutexPool, NULL) != 0 ||
            pthread_mutex_init(&pool->mutexBusy, NULL) != 0 ||
            pthread_cond_init(&pool->notEmpty, NULL) != 0 ||
            pthread_cond_init(&pool->notFull, NULL) != 0)
        {
            printf("mutex or condition init fail...\n");
            break;
        }

        // 任務(wù)隊列
        pool->taskQ = (Task*)malloc(sizeof(Task) * queueSize);
        pool->queueCapacity = queueSize;
        pool->queueSize = 0;
        pool->queueFront = 0;
        pool->queueRear = 0;

        pool->shutdown = 0;

        // 創(chuàng)建線程
        pthread_create(&pool->managerID, NULL, manager, pool);
        for (int i = 0; i < min; ++i)
        {
            pthread_create(&pool->threadIDs[i], NULL, worker, pool);
        }
        return pool;
    } while (0);

    // 釋放資源
    if (pool && pool->threadIDs) free(pool->threadIDs);
    if (pool && pool->taskQ) free(pool->taskQ);
    if (pool) free(pool);

    return NULL;
}

int threadPoolDestroy(ThreadPool* pool)
{
    if (pool == NULL)
    {
        return -1;
    }

    // 關(guān)閉線程池
    pool->shutdown = 1;
    // 阻塞回收管理者線程
    pthread_join(pool->managerID, NULL);
    // 喚醒阻塞的消費者線程
    for (int i = 0; i < pool->liveNum; ++i)
    {
        pthread_cond_signal(&pool->notEmpty);
    }
    // 釋放堆內(nèi)存
    if (pool->taskQ)
    {
        free(pool->taskQ);
    }
    if (pool->threadIDs)
    {
        free(pool->threadIDs);
    }

    pthread_mutex_destroy(&pool->mutexPool);
    pthread_mutex_destroy(&pool->mutexBusy);
    pthread_cond_destroy(&pool->notEmpty);
    pthread_cond_destroy(&pool->notFull);

    free(pool);
    pool = NULL;

    return 0;
}


void threadPoolAdd(ThreadPool* pool, void(*func)(void*), void* arg)
{
    pthread_mutex_lock(&pool->mutexPool);
    while (pool->queueSize == pool->queueCapacity && !pool->shutdown)
    {
        // 阻塞生產(chǎn)者線程
        pthread_cond_wait(&pool->notFull, &pool->mutexPool);
    }
    if (pool->shutdown)
    {
        pthread_mutex_unlock(&pool->mutexPool);
        return;
    }
    // 添加任務(wù)
    pool->taskQ[pool->queueRear].function = func;
    pool->taskQ[pool->queueRear].arg = arg;
    pool->queueRear = (pool->queueRear + 1) % pool->queueCapacity;
    pool->queueSize++;

    pthread_cond_signal(&pool->notEmpty);
    pthread_mutex_unlock(&pool->mutexPool);
}

int threadPoolBusyNum(ThreadPool* pool)
{
    pthread_mutex_lock(&pool->mutexBusy);
    int busyNum = pool->busyNum;
    pthread_mutex_unlock(&pool->mutexBusy);
    return busyNum;
}

int threadPoolAliveNum(ThreadPool* pool)
{
    pthread_mutex_lock(&pool->mutexPool);
    int aliveNum = pool->liveNum;
    pthread_mutex_unlock(&pool->mutexPool);
    return aliveNum;
}

void* worker(void* arg)
{
    ThreadPool* pool = (ThreadPool*)arg;

    while (1)
    {
        pthread_mutex_lock(&pool->mutexPool);
        // 當(dāng)前任務(wù)隊列是否為空
        while (pool->queueSize == 0 && !pool->shutdown)
        {
            // 阻塞工作線程
            pthread_cond_wait(&pool->notEmpty, &pool->mutexPool);

            // 判斷是不是要銷毀線程
            if (pool->exitNum > 0)
            {
                pool->exitNum--;
                if (pool->liveNum > pool->minNum)
                {
                    pool->liveNum--;
                    pthread_mutex_unlock(&pool->mutexPool);
                    threadExit(pool);
                }
            }
        }

        // 判斷線程池是否被關(guān)閉了
        if (pool->shutdown)
        {
            pthread_mutex_unlock(&pool->mutexPool);
            threadExit(pool);
        }

        // 從任務(wù)隊列中取出一個任務(wù)
        Task task;
        task.function = pool->taskQ[pool->queueFront].function;
        task.arg = pool->taskQ[pool->queueFront].arg;
        // 移動頭結(jié)點
        pool->queueFront = (pool->queueFront + 1) % pool->queueCapacity;
        pool->queueSize--;
        // 解鎖
        pthread_cond_signal(&pool->notFull);
        pthread_mutex_unlock(&pool->mutexPool);

        printf("thread %ld start working...\n", pthread_self());
        pthread_mutex_lock(&pool->mutexBusy);
        pool->busyNum++;
        pthread_mutex_unlock(&pool->mutexBusy);
        task.function(task.arg);
        free(task.arg);
        task.arg = NULL;

        printf("thread %ld end working...\n", pthread_self());
        pthread_mutex_lock(&pool->mutexBusy);
        pool->busyNum--;
        pthread_mutex_unlock(&pool->mutexBusy);
    }
    return NULL;
}

void* manager(void* arg)
{
    ThreadPool* pool = (ThreadPool*)arg;
    while (!pool->shutdown)
    {
        // 每隔3s檢測一次
        sleep(3);

        // 取出線程池中任務(wù)的數(shù)量和當(dāng)前線程的數(shù)量
        pthread_mutex_lock(&pool->mutexPool);
        int queueSize = pool->queueSize;
        int liveNum = pool->liveNum;
        pthread_mutex_unlock(&pool->mutexPool);

        // 取出忙的線程的數(shù)量
        pthread_mutex_lock(&pool->mutexBusy);
        int busyNum = pool->busyNum;
        pthread_mutex_unlock(&pool->mutexBusy);

        // 添加線程
        // 任務(wù)的個數(shù)>存活的線程個數(shù) && 存活的線程數(shù)<最大線程數(shù)
        if (queueSize > liveNum && liveNum < pool->maxNum)
        {
            pthread_mutex_lock(&pool->mutexPool);
            int counter = 0;
            for (int i = 0; i < pool->maxNum && counter < NUMBER
                && pool->liveNum < pool->maxNum; ++i)
            {
                if (pool->threadIDs[i] == 0)
                {
                    pthread_create(&pool->threadIDs[i], NULL, worker, pool);
                    counter++;
                    pool->liveNum++;
                }
            }
            pthread_mutex_unlock(&pool->mutexPool);
        }
        // 銷毀線程
        // 忙的線程*2 < 存活的線程數(shù) && 存活的線程>最小線程數(shù)
        if (busyNum * 2 < liveNum && liveNum > pool->minNum)
        {
            pthread_mutex_lock(&pool->mutexPool);
            pool->exitNum = NUMBER;
            pthread_mutex_unlock(&pool->mutexPool);
            // 讓工作的線程自殺
            for (int i = 0; i < NUMBER; ++i)
            {
                pthread_cond_signal(&pool->notEmpty);
            }
        }
    }
    return NULL;
}

void threadExit(ThreadPool* pool)
{
    pthread_t tid = pthread_self();
    for (int i = 0; i < pool->maxNum; ++i)
    {
        if (pool->threadIDs[i] == tid)
        {
            pool->threadIDs[i] = 0;
            printf("threadExit() called, %ld exiting...\n", tid);
            break;
        }
    }
    pthread_exit(NULL);
}

6. 測試代碼

void taskFunc(void* arg)
{
    int num = *(int*)arg;
    printf("thread %ld is working, number = %d\n",
        pthread_self(), num);
    sleep(1);
}

int main()
{
    // 創(chuàng)建線程池
    ThreadPool* pool = threadPoolCreate(3, 10, 100);
    for (int i = 0; i < 100; ++i)
    {
        int* num = (int*)malloc(sizeof(int));
        *num = i + 100;
        threadPoolAdd(pool, taskFunc, num);
    }

    sleep(30);

    threadPoolDestroy(pool);
    return 0;
}

文章鏈接: https://subingwen.cn/linux/threadpool/#1-%E7%BA%BF%E7%A8%8B%E6%B1%A0%E5%8E%9F%E7%90%86

瀏覽 35
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 三级片日本在线| av无码av天天av天天爽| 最美孕交vivoestv另类| 在线中文字幕视频| 三级在线观看视频| 蜜臀av在线播放| 亚洲精品无码一区| 精品人妻中文字幕视频| 欧美日韩成人在线| 天天人人精品| 俺也去五月婷婷| 91吴梦梦无码一区二区| 一二三区| 色人阁人妻中文字幕| 久久久久免费视频| 欧美色色色色色| 亚洲一区二区三区在线播放| 国产日B| 手机AV网站| 久久机热| 国产又大又粗又长| 日批视频在线观看| 国产av网站大全| 亚洲中文字幕在线无码| 久久日韩视频| 韩国AV三级| 无码人妻一区二区三区| a视频免费在线观看| 黄片无码免费| 动漫一区二区| 久久久久99精品成人片直播| 一道本视频在线免费观看| 欧美操逼视频| 91视频观看| 亚洲人网站| 福利精品| 狠狠躁日日躁夜夜躁A片小说免费| 天天日天天| 好看的中文字幕av| 亚洲高清福利| 国产又粗又长又硬黄色一级片| 狼人久久| 好吊看视频| www.久久久久| 国产精品久久久精品cos| 日韩美女免费视频| 亚洲综合视频网| 亚洲四房播| 成人视频观看| 国产精品可站18| 大香蕉欧美| 影音先锋男人站| 国产成人精品视频免费| 伊人福利导航| 毛片毛片毛片毛片毛片| 国产精品秘久久久久久一两个一起 | 久久久久国产一区二区三区四区| 黄色在线| a视频在线| 人人妻人人| 日韩爱爱网| 国产一二区| 亚洲免费观看高清完整版在线观| 欧美人妻无码| 中文字幕乱码无码人妻系列蜜桃 | 欧美日韩成人在线| 亚洲精品午夜福利| 国产欧美日韩在线观看| 蜜臀久久久久久999| 爱爱视频欧美| www.天天射| 亚洲特级毛片| 久草视频大香蕉| 无码秘蜜桃吴梦梦| 日韩性生活网| 日本一区二区视频在线| 污视频网站免费在线观看| 青青日逼| 青青草社区视频| 国产在线观看97| 亚州精品国产精品乱码不99勇敢 | 亚洲码AV波多野| 国产精品一品二区三区的使用体验| 国产精品18进进出出17c| 亚洲欧美综合| 欧美一级A片高清免费播放| 免费在线观看黄色视频网站| 大香蕉伊人在线观看| 在线操逼| 婷婷狠狠| 黄频在线观看| 人人操在线播放| 一本一道AV| 狠狠色丁香| 久久精品视频99| 91免费在线看| 国产一级A片久久久免费看快餐| 四虎在线观看一区网址| 色中色在线视频| 一级二级三级无码| 久久免费视频1| 九九九精品在线| 久久午夜一级A片| 处破女初破全过免费看| 潮喷在线观看| 国产女主播在线观看| 午夜福利成人网站| 60分钟上大床又黄又爽| 亚洲黄色免费电影| 色婷婷AV一区二区三区之e本道| 91成人无码视频| 九色自拍视频| AV黄色在线观看| 色婷婷在线免费视频| 在线成人免费视频| 91丨国产丨精品丨丝袜| 免费高清无码在线观看| 狠狠操AV| 中文字幕无码在线视频| 日韩在线小视频| 国产欧美在线观看| 黄色视频免费看| 欧美丝袜脚交xxxxBH| 国产欧美精品成人在线观看| 亚洲人内射片又| 中国A级片| 精品乱子伦一区二区三区毛| 久操手机在线| 欧美老女人逼| A级黄色毛片| 人人操狠狠操| 永久免费AV| 日韩AV高清无码| 久久偷拍网| 亚洲.欧美.丝袜.中文.综合 | 午夜激情视频在线观看| 亚洲无码性爱| 一级片免费在线观看| www.cao| 久久中文字幕综合| 九九九九AV| 中文字幕高清视频| 综合黄色| 亚洲无码中文字幕在线| 作爱网站| 2025AV在线| 亚洲一级免费视频| 亚洲乱伦视频| 国产在线观看| 操逼免费观看| 99电影网手机在线观看| 国产乱婬片视频| 国产一级A片在线观看| 日韩精品免费一区二区在线观看| AV手机天堂| 福利一区在线观看| 丁香五月激情啪啪啪| 日本高清无码在线观看| 操逼亚洲| 麻豆乱码国产一区二区三区| 欧美一区二区三区婷婷五月| 免费做爱视频网站| 日韩天堂在线播放| 波多野结衣无码一区| 伊人操逼| 91干干干| 亚洲精品无码久久久| 尤物无码| 欧美福利视频| 天堂黄片| 国产福利在线导航| 91精品国产成人做爰观看奶头 | 亚洲免费中文字幕| 免费看无码一级A片放24小时| 久久伊人大香蕉| 91无码视频在线观看| 国产午夜福利免费视频在线观看| 亚州性爱| 国产欧美黄片| 亚洲无码一级片| 水蜜桃一曲二区| 亚洲黄色电影在线观看| 日本三级黄色视频| 日本黄色片在线播放| 晚上碰视频| 久草手机视频在线观看| 国产无码区| 強姦婬片A片AAA毛片Mⅴ| 午夜操逼| 99久99| 特黄一级片| 撒尿BBw搡BBwBBw| 在线成人免费视频| 亚洲天堂成人| 国产熟女一区二区三区五月婷| 国产a毛一级,a毛一级| 无码蜜桃吴梦梦| 91狠狠色丁香婷婷综合久久精品 | 国产精品成人在线| 黄色毛片在线观看| 欧美精品久久久久久久久爆乳| 99操逼视频| 日韩黄在线| 午夜aaa| 欧美八区| www.97超碰| 男女av免费观看| 日本色中文字幕| 中文无码人妻少妇| 亚洲高清中文字幕| 大香蕉人人| 成人性爱免费视频| 成年人在线观看视频网站| 一级黄色视频片| 四川性BBB搡BBB爽爽爽小说| 在线观看视频日韩| 久久内射| 日韩毛片视频| 日毛片| 亚洲色婷婷综合| 国产最新地址| 国产l精品久久久久久久久久| 精品三级网站| 蜜桃黄色视频| 婷婷五月18永久免费视频| 亚洲第一区欧美日韩| 中文字幕A片无码免费看| www亚洲无码A片贴吧| 黄片一区二区三区| 超碰人人91| 九九九无码| 中文字幕免费观看视频| AV资源免费| 国产精品国产三级国产专区52 | 人人人人摸| 久草视频免费在线播放| 色伊人网| 日韩中文字幕一区二区三区| 牛牛成人在线视频| 一级调教看片| 天天干天天干| 91中文字幕| 免费无码成人片在线观看在线| 操人妻| 无码视频在线看| 伊人影院99| 香蕉在线播放| 久久亚洲AV无码午夜麻豆| 日本亚洲欧洲免费| 亚洲va在线∨a天堂va欧美va| 免费AV网站| 亚洲免费观看视频| 99视频在线播放| 在线免费观看毛片| 男女www视频| 天天插天天日| 国产又爽又黄免费网站在| 91成人网站| 熟女国产| 免费无码婬片AAAA片老婦| 手机看片1024国产| 一区二区三区四区在线播放| 四色永久成人网站| 亚洲专区中文字幕| 另类毛片| 国产www在线观看| 色诱av| 俺去俺来也www色视频| 国产精品电影| av大香蕉| 无套内射在线免费观看| 日韩av在线不卡| 亚洲AV无码高清| 国产精品自产拍| ThePorn-成人网站入口| 一区二区三区Av| 日逼视频网| 亚洲中文字幕色| 一级黄色免费看| 亚洲人妻系列| 国产色情在线观看| 97人妻无码一区二区| 婷婷综合视频| 大鸡巴网站| 亚洲精品97| 无码主播| 中文激情网| 大炕上公让我高潮了六次| 北京熟妇搡BBBB搡BBBB电影| 国产精品欧美一区二区| 无码AV大香线蕉伊人| 在线观看中文字幕av| 五月婷婷深深爱| 国产A片免费看| 青娱乐三级在线免| 麻豆精品一区二区三区| 天天舔九色婷婷| 丁香花免费高清视频小说完整| 88在线无码精品秘入口九色| 国产91精品探花一区二区| 51国产黑料吃瓜在线入口| 国产色情在线观看| av手机版| 91成人影片| 亚洲北条麻妃一级A片| 国产精品人妻无码久久久郑州天气网| 处破女初破全过免费看| sesese999| 久久亚洲日韩天天做日日做综合亚洲| 三须三级久久三级久久18| 可以免费看的AV| 中文日韩在线| 欧美大黑逼| 狼友视频在线观看| 天堂黄片| 69av网站| 欧美一级精品| 日韩欧美高清视频| 欧美精品国产动漫| 久久永久免费视频| 亚洲第一页在线| 国产中文人人国际| 日韩在线一区二区三区四区| 黄片无码免费| 成人电影一区二区三区| 无码在线播放视频| 宗合久久| 久久三级片| 国产第五页| 色综合一区| 中文字幕一区三区三A片密月| 在线观看免费一区| 国产成人精品在线| 婷婷五月天丁香成人社区| 色色综合视频| 日日干天天| 日韩在线中文字幕亚洲| 在线日韩国产| 一本色道久久综合无码| 激情AV在线| 国产一级a毛一级a做免费的视频l| 免费中文字幕日韩欧美| 国产日韩欧美久久| 亚洲天堂高清| 蜜臀91| 99久久人妻精品免费二区| 免费国产三级片| 外国一级片| 狠狠干老司机| 亚洲秘一区二区三区-精品亚洲二区- | 日韩人妻无码视频| 国产91嫩草乱婬A片2蜜臀| 成年人视频在线免费观看| 麻豆成人91精品二区三区| av天堂资源| 国产福利视频导航| 亚洲AV一二三| 91丨九色丨熟女新版| 黄色成人在线观看| 97人人爽人人爽人人爽人人爽| 一级A片免费视频| 婷婷激情中文字幕| 久久色婷婷| 青春草在线观看| 二区三区视频| 热热av| 国产伦精品一区二区三区色大师 | 国产av二区| 俺去也在线视频| 午夜性爱福利| 91人妻人人澡人人添人人爽| 韩国无码免费| 人人摸人人操人人爱| 少妇精品久久久久久久久久| 午夜天堂网| 四虎2025在线51| 国产人妻精品一二三区| 大香蕉国产在线| 成人一区二区在线观看| 婷婷丁香激情五月天| 日韩极品在线观看| 一本道在线无码| 人妻体体内射精一区二区| 欧美亚洲日韩一区二区三区| 欧美一区二区三区激情| 国产色情视频在线观看| 中文字幕中文字幕一区| 五月天乱伦小说| 淫荡少妇美红久久久久久久久久| 国外成人性视频免费| 成人一级片| 成人黄色一级A片| 极品少妇AV| 欧美喷水视频| 日韩午夜AV| 污视频在线免费| 神马影院午夜福利| 99视频在线免费观看| 黄色录像毛片| 日韩AV电影在线观看| 高清无码高潮| 中文字幕久久人妻无码精品蜜桃 | 人人摸人人搞| 在线婷婷| 三级电影久久麻豆| 国产办公室丝袜人妖| 欧美亚洲黄色| 黄色一级免费电影| 日产久久久久久| 国内精品久久久久| 麻豆传媒一区| 亚洲欧美日韩国产| 永久中文字幕| 国产乱码一区二区三区的解决方法 | 91亚洲精品国偷拍自产在线观看 | 蜜臀久久99精品久久久久久宅男| 91亚洲国产成人精品一区| 国产日韩欧美久久| 西西444WWW大胆无视频软件亮点 | 亚洲吹箫| 欧美性性生交XXXXX无码| 国产成人精品无码片区在线观91| 在线观看免费A片| 最新av网| 久草免费在线视频| www.AV在线| 99热免费| 亚洲精品资源在线| 欧美日韩一区二区三区视频| 久久午夜无码鲁丝片午夜精| 国产中文字字幕乱码无限| 高清av在线| 亚洲群交视频| 苍井空亚洲精品AA片在线播放| 人人操人人骑| 先锋久久资源| 免费一级黄色视频| 久色亚洲| 人人操AV在线| 色吟AV| 浮力影院av| 亚洲AV免费| 美腿丝袜中文字幕精品| 学生妹一级| 国产精品成人无码免费| 久久久久久免费毛片精品| 国产在线观看免费成人视频| 国产婷婷色| 99热网址| 久久久久久久久久久久久久久久久久免费精品分类视频 | 日韩AV手机在线观看| 亚洲成人性爱网| 久久成人影音| 亚洲欧美在线综合| 国产三级91| 亚洲精品秘一区二区三区在线观看| 日韩av三级在线观看| JiZZjiZZ亚洲成熟熟妇| 欧美另类极品| 欧洲黑人成人A版免费视频| 国产成人视频免费观看| 欧美一区二区精品| 天天日天天爽| 操日本美女| 蜜桃Av噜噜一区二区三区四区| 天天操天天干欧美精品| 日本黄色视频网址| 亚洲另类图片小说| 天天日天天日天天日| 亚洲视频播放| 不卡在线| 国产伦理一区| 日本少妇午夜福利| 免费黄色视频网站| 欧美人操逼视频| 成人五月天黄色电影| 日韩无码视频一区| 你懂的在线网站| 成人无码91| 五月天AV网站| 91成人免费视频| 一区二区三区无码高清| 黄片在线网站| 久久人妻免费视频| www.51av| 韩国三级av| 丰滿人妻-区二区三区| 热久久综合网站| 特级黄色片| 婷婷内射| 黑人AV在线观看| 日本精品视频在线| 综合色国产精品欧美在线| 亚洲一区二区av| 亚洲色图欧美另类| 中文字幕日本成人| 欧美性爱内射| 色欲国产精品欧美在线密| 在线观看禁无码精品| 亚洲www在线观看| 久热思思| 影音先锋女人aV鲁色资源网站| 美女黄网站| 91精品视频在线播放| 翔田千里無碼破解| 自慰影院| henhengan| 波多野结衣高清av久久直播免| 91在线精品秘一区二区黄瓜| 军人妓女院BD高清片在线播放| 在线观看中文字幕AV| 日韩毛片大全| 欧美精品操逼| 蜜桃av秘无码一区二区三| 插菊花综合网1| 色婷婷中文字幕| 国产精品三| 成人黄A片免费| 成人黄色一级A片| 无码人妻丰满熟妇精品区| 日本高清无码| 精品人妻一区二区三区-国产精品 无码人妻av黄色一区二区三区 | 熟女导航| 日韩午夜成人| 成人网站一区| 第四色激情网| 久久只有精品| 美女乱伦视频| 黄片高清无码在线观看| 黄色片一级片| 毛片小电影| 亚洲视频三区| 日韩一级无码毛片| 俺来也影院| 国产91探花系列在线观看| GOGO人体做爰大胆视频| 国产婷婷色一区二区三区| AV免费网址| 亚洲精品久久久久avwww潮水| 色超碰| 婷婷六月综合| 成人a毛片| 99人妻人人爽人人添人人精品| 黄页网站免费在线观看| www.日本色| 毛片资源| 久本草精品| 狠狠操狠狠色| 人妻少妇av中文字幕乱码牛牛| 三个黑人猛躁我一晚上| 欧美日韩在线视频一区| 免费的黄片| 日韩三级片av| 五月婷婷六月激情| 特级西西444www高清| 亚洲欧美日韩电影| 国产黄色视频在线观看免费| 日本高清色清di免费观看| 国产乱子伦真实精品| 偷拍视频网站| 亚洲欧美成人在线视频| 色色视频网| 久久久久一区二区三区| 国产精品久久免费视频| va色婷婷亚洲在线| 人人妻日日摸狠狠躁| 99在线视频播放| 欧美性爱香蕉视频| 亚洲中文字幕在线观看视频网站| 亚洲中文字幕av| 久久一本| 天天干天天操天天| 无码日韩精品一区二区免费96| 国产福利AV| 91在线精品视频| 神马午夜精品95| 靠比免费| 岛国A视频| 久射精品| 国产乱子伦一区二区三区视频| 日韩欧美大香蕉| 99精品在线播放| 亚洲人成免费网站| 国产小视频免费在线观看| 国产精品久久久久国产A级| 日本三级片视频不卡| 五月天久久久| 天天天天天天干| 91亚洲视频| 中文字幕人妻精品一区| 麻豆艾秋MD0056在线| 黄色视频免费在线看| 日韩在线综合网| 亚洲的天堂的αⅴ| 成人毛片18女人毛片| 免费a片在线观看| 一区二区三区在线观看| 玩弄人妻少妇500系列视频 | 欧美日韩免费| 国产精品成人国产乱| 免费毛片观看| 白天操夜夜操| 成人免费精品| 日韩黄片免费看| 日韩精品电影| 精品视频一区二区三区| 国产vA| 自拍偷拍福利视频网站| 欧美黄色一级网站| 91亚洲精品国偷拍自产在线观看 | 天天狠狠干| 刘玥91精一区二区三区| 翔田千里無碼破解| 黄色一级片免费看| 爱爱打炮影院| 久久无码影视| 嫩BBB槡BBBB槡BBB小号| 黄片视频免费在线观看| 91拍真实国产伦偷精品| 亚洲色情视频| 97男人的天堂| 国产精品无码成人AV电影| 人妻三级| 免费在线无码视频| 一级黄色片网站| 亚洲A网| 成人在线国产| 亚洲AV免费在线观看| 精品蜜桃一区内容| 黄频在线免费观看| 国产成人精品久久二区二区91 | 99er在线观看| 亚洲精品女人久久久| 国产成人视频免费观看| 一级A片免费观看| 亚洲无码视频在线观看| 美日韩A片| 欧美18成人| 中文字幕在线观看日本| 欧美不卡一区二区三区| 国产一级二级三级| 麻豆传媒猫爪| 翔田千里av在线| 最近日本中文字幕中文翻译歌词| 久久视频国产| 无码99| 九九热九九| 国产香蕉在线播放| 欧美在线中文| 成人黄网免费观看视频| 99涩涩| 大香蕉伊人在线观看| 97人妻碰碰中文无码久热丝袜| 日韩欧美天堂| 九一成人电影| 国产日韩一区| 亚洲无码影视| 国产黄色在线看| 很很干在线视频| 精品视频在线播放| 91福利网| 色香蕉在线视频| 色综合激情| 超碰在线天天干| 99热最新| 18禁看网站| 丁香在线视频| 色妞视频精品一区| 韩国三级无码| 爆乳一区二区三区| 成人性爱在线观看| 色五月视频在线| 五月天激情小说网| 91无码精品一区二区| 国产精品2025| 韩国无码一区| 娇小,学生,高潮,videos| 亚洲AV无码久久寂寞少妇多毛| 99热偷拍| 婷婷五月天青草| 国产主播一区二区| 熟妇一区二区| eeuss一区| 仙踪林777777野大粗| 日韩有码中文字幕在线观看| 四虎黄色| 国产特级毛片AAAAAA| 好男人WWW一区二区三区| 男女日逼| 青春草在线播放| 久久国产精品网站| 欧美福利电影| 黄色av免费观看| 最新国产AV| 国产91麻豆视频| 国产中文在线观看| 嫩草Av| 无码福利视频| 操逼网站视频| 国产成人精品久久二区二区91| 亚洲精品免费在线观看| 野花AV| 亚洲无码中文人妻| 午夜资源网| 91婷婷| 日美女网站| 国产乱子伦-区二区三区四区| 好吊视频一区二区三区| 亚洲欧洲高清无码| 日韩一级网站| 日本亚洲视频| 国产做受91一片二片老头| 国产精品一区二区在线| 日韩av在线不卡| 青娱乐偷拍视频| 狠狠操狠狠撸| 欧美在线观看一区二区| 五月婷婷丁香在线| av中文在线| 麻豆精品秘国产| 国产一级女婬乱免费看| а√天堂中文最新版8| 久久久精品欧美| 日本黄色电影网站| www.AV在线| 大地影院在线资源观看| 欧美MV日韩MV国产网站| 久久久免费| WWW亚洲视频| 黄色片网站免费观看| 青草久久视频| 日韩综合| 成人做爰黄A片免费视频网站野外| 无码中文视频| 婷婷五月国产| 99视频在线| 久久播视频| 国产一级视频| 婷婷国产成人精品视频| 夜夜欢天天干| 国产亚洲欧美视频| 久久久久久久国产| 人人人人人人人人操| 丁香婷婷色五月| 69成人天堂无码免费| 国产激情久久| 俺去也www俺去也com| 淫一区二区| 一区二区三区免费在线观看| 久久国产热在8| 学生妹一级片| 91人人妻人人做人人爽| 成人黄网免费观看视频| 欧美操穴| 97人妻精品一区二区三区| 美国黄色A片| 免费在线a| 久久99国产精品| 欧美性之站| 免费无码国产| 影音先锋三级资源| 亚洲AV免费在线观看| 天天爽夜夜| 亚洲性夜夜天天天天天天| 亚洲日本国产| 国产亚洲视频免费观看| 欧美亚洲黄片| 久草免费福利| 大香蕉一级红色片青青河边草| 五月丁香婷婷综合网| 翔田千里53歳在线播放| 日本免费不卡| 欧美日韩综合| 东方av在线观看| 日韩十八禁网站| 成人电影aaa| www.99精品| 久久久久久久久成人| 老欧性老太色HD大全| 12—13女人毛片毛片| 蜜桃视频在线观看18| 99在线视频免费| 中文字幕一区三区三A片密月| 99精品视频免费| 国产日韩欧美成人| 国产色视频| 影音先锋av无码| 日本欧美成人片AAAA| 夜夜骚av一区二区三区| 久草资源在线观看| 欧美一级黄片免费看| 久久久久久久性爱| 日韩久久久久| 国产成人精品无码片区在线观91 | 亚洲高清无码在线视频| 中文字幕日韩有码| np高辣调教视频| caopro| 一区无码高清| 亚洲精品一区无码A片丁香花| 五月丁香婷婷在线| 日韩久久精品视频| 日韩高清久久| 日韩免费高清无码| 久久久久麻豆V国产精华液好用吗| 99久久精彩视频| 内射学生妹| xxxxx日韩| 国产精品V日韩精品V在线观看| 陈冠希和张柏芝mv| 美女福利视频| 久久久久中文字幕| 亚洲视频中文字幕| 五月婷婷亚洲| 三级黄色视频在线观看| 久草网址| 亚洲高清视频在线观看| 九九碰九九爱97超碰| 51妺嘿嘿午夜福利视频| 日韩高清色| 中文字幕精品在线| 男人天堂色男人| 97久久精品| 久久亚洲AV无码午夜麻豆| 人人爱人人操| 东京热一区二区三区| 欧美三级片网| 四虎Av| 色综合久久88色综合天天99| 亚洲精品一区二区三区新线路| 风间由美大荫蒂无码AV| 日韩视频免费看| 亚洲91视频| 大荫蒂HD大荫蒂视频| 99无码人妻| 风流老熟女一区二区三区| 黄色一级片免费在线观看| 久久三级片| 午夜激情视频在线观看| 国产精品色视频| 日韩精品成人片| 三级无码在线播放| 久操精品视频| 欧美日韩视频| 成人影片在线观看网站18| 色婷婷日韩精品一区二区三区| 婷婷五月国产| 国产黄色片在线播放| 日本少妇激情视频| 日国无码| 欧美视频一区二区三区| 国产黄色网页| 国产伊人久久| 久操视频网站| 亚洲精品久久久久久久久蜜桃 | 91少妇精品| 日韩免费| 国产黄色网| 激情动态视频| 色逼综合| 日韩婬乱片A片AAA真人视频 | 麻豆免费成人视频| 777视频在线观看| 中文字幕第9页| AV日日| 免费看毛片的网站| 蜜臀久久99久久久久久宅男 | 五月丁香网站| 乱子伦国产精品| 伊人久久大香线蕉av一区| 日本伊人大香蕉| 老熟妇一区二区三区啪啪| 一区二区三区四区在线看| 天天色粽合合合合合合合| 亚洲Av秘无码一区二区| 伊人免费视频在线观看| 四川少妇bbbb| 午夜三级视频| 免费a片观看| 91麻豆免费看| 国产欧美综合视频| 亚洲AV成人片色在线观看麻豆| 波多野结衣黄色| 亚洲成人一区二区三区| 中文字幕日韩欧美| 潮喷在线| 日韩一级欧美一级| 国产56页| 草逼网站| 日韩成人中文字幕| 麻豆免费成人传媒| 亚洲天堂网在线观看| 国产黄色精品| 中文字幕亚洲日韩| 欧美黄视频| 国产成人99久久亚洲综合精品| 国产三级黄片| 黄片aaa| 69av在线播放| 水果派AV解说|