最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一種類似JAVA線程池的C++線程池實(shí)現(xiàn)方法

 更新時(shí)間:2019年07月24日 10:48:01   投稿:mrr  
線程池(thread pool)是一種線程使用模式。線程過多或者頻繁創(chuàng)建和銷毀線程會(huì)帶來調(diào)度開銷,進(jìn)而影響緩存局部性和整體性能。這篇文章主要介紹了一種類似JAVA線程池的C++線程池實(shí)現(xiàn)方法,需要的朋友可以參考下

什么是線程池

線程池(thread pool)是一種線程使用模式。線程過多或者頻繁創(chuàng)建和銷毀線程會(huì)帶來調(diào)度開銷,進(jìn)而影響緩存局部性和整體性能。而線程池維護(hù)著多個(gè)線程,等待著管理器分配可并發(fā)執(zhí)行的任務(wù)。這避免了在處理短時(shí)間任務(wù)時(shí)創(chuàng)建與銷毀線程的代價(jià),以及保證了線程的可復(fù)用性。線程池不僅能夠保證內(nèi)核的充分利用,還能防止過分調(diào)度。

線程池的實(shí)現(xiàn)

       線程池在JAVA平臺(tái)上已經(jīng)有成熟的實(shí)現(xiàn)方式,本文介紹參考JAVA線程池實(shí)現(xiàn)方式實(shí)現(xiàn)的C++線程池類庫。

       該類庫代碼已上傳至github倉庫中,下載地址為:https://github.com/xiaoba-8/mixthread

       該類庫中主要的類的關(guān)系如下圖所示:

線程池類圖

       其中,IRuanble為接口類,類似JAVA中的Runnable接口;

       DefulatMutext 為訪問互斥體類,用于臨界資源時(shí)的加解鎖;

       RootThread為線程實(shí)現(xiàn)的基類,定義了線程中的通用的方法;

       CommonThread為一個(gè)簡(jiǎn)單的線程實(shí)現(xiàn)類,類似于JAVA中的Thread類;

       DefaultThread類為另一線程實(shí)現(xiàn)類,以IRunnable為參數(shù),可將IRunnable轉(zhuǎn)化為線程;

ThreadPool為線程池實(shí)現(xiàn)類,類似JAVA中的ThreadPool類。

類庫的安裝方法

1.     下載類庫實(shí)現(xiàn)源代碼:https://github.com/xiaoba-8/mixthread

2.     進(jìn)入類庫根文件夾依次執(zhí)行configure,make, make install

類庫的使用方法

與JAVA線程池的使用方式相似,首先創(chuàng)建實(shí)現(xiàn)IRunnable接口的類,然后交由ThreadPool類實(shí)例進(jìn)行調(diào)度即可以。

以下按示例代碼:

1.     創(chuàng)建demo_main.cpp文件,代碼如下:

#include <stdio.h>
#include <mix/thread/ThreadPool.h>
class DemoThread : public mix::IRunnable
{
private:
    int id;
public:
    DemoThread(int id)
    {
       this->id = id;
    }
    virtual void Run()
    {
       for (int i = 0; i < 3; i++)
       {
           usleep(500);
           printf("Thread %d: loop index %d\n", id, i);
       }
    }
    virtual bool IsDelete ()
    {
       return true;
    }
    virtual int Priority()
    {
       return 0;
    }
    virtual void SetPriority(int priority)
    {
    }
    virtual void Cancel()
    {
    }
    virtual bool IsCanceled()
    {
       return false;
    }
    virtual void Pause() {}
    virtual void Resume() {}
    virtual bool IsPaused()
    {
       return false;
    }
    virtual std::string GetTaskId()
    {
       return "";
    }
    virtual void TryPause()
    {
    }
};
int main(int argc, char *argv[])
{
    mix::ThreadPool threadPool(10, 20, 5);
    printf("Mix Thread Begin\n");
    for (int i = 0; i < 5; i++)
    {
       threadPool.Execute(new DemoThread(i));
    }
    sleep(1);
    while (threadPool.GetActiveCount() > 0)
    {
       sleep(1);
    }
    printf("Mix Thread End\n");
    return 0;
}

2.     執(zhí)行以下命令進(jìn)行編譯,(假設(shè)mixthread安裝在/usr/local目錄下)

g++ -I/usr/local/include -g -O2 demo_main.cpp -pthread -o mix_thread_demo -lmixthread -pthread -Wl,-rpath -Wl,/usr/local/lib

生成執(zhí)行程序mix_thread_demo

3.     執(zhí)行結(jié)果

執(zhí)行  ./mix_thread_demo, 顯示如下結(jié)果

./mix_thread_demo
Mix Thread Begin
Thread 3: loop index 0
Thread 4: loop index 0
Thread 2: loop index 0
Thread 1: loop index 0
Thread 0: loop index 0
Thread 4: loop index 1
Thread 3: loop index 1
Thread 2: loop index 1
Thread 1: loop index 1
Thread 0: loop index 1
Thread 4: loop index 2
Thread 3: loop index 2
Thread 2: loop index 2
Thread 1: loop index 2
Thread 0: loop index 2
Mix Thread End

總結(jié)

以上所述是小編給大家介紹的一種類似JAVA線程池的C++線程池實(shí)現(xiàn)方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • java調(diào)用c程序通信示例代碼

    java調(diào)用c程序通信示例代碼

    這篇文章主要介紹了java調(diào)用c程序通信示例,大家參考使用吧
    2013-12-12
  • 使用SpringBoot-JPA進(jìn)行自定義保存及批量保存功能

    使用SpringBoot-JPA進(jìn)行自定義保存及批量保存功能

    這篇文章主要介紹了使用SpringBoot-JPA進(jìn)行自定義的保存及批量保存功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • java生成壓縮文件示例代碼

    java生成壓縮文件示例代碼

    在工作過程中,需要將一個(gè)文件夾生成壓縮文件,然后提供給用戶下載。寫了一個(gè)壓縮文件的工具類。該工具類支持單個(gè)文件和文件夾壓縮
    2013-11-11
  • Java注解示例詳解(含底層原理)

    Java注解示例詳解(含底層原理)

    注解在現(xiàn)代Java開發(fā)中扮演著重要角色,廣泛應(yīng)用于框架開發(fā)、代碼生成和運(yùn)行時(shí)功能擴(kuò)展,下面這篇文章主要介紹了Java注解底層原理的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-10-10
  • Java 線程相關(guān)總結(jié)

    Java 線程相關(guān)總結(jié)

    這篇文章主要介紹了Java 線程的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-02-02
  • Java二分查找算法實(shí)現(xiàn)代碼實(shí)例

    Java二分查找算法實(shí)現(xiàn)代碼實(shí)例

    這篇文章主要介紹了Java二分查找算法實(shí)現(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • SpringBoot統(tǒng)一返回格式的方法詳解

    SpringBoot統(tǒng)一返回格式的方法詳解

    今天小編主要是和大家分享一個(gè)讓代碼變得更簡(jiǎn)潔的小技巧:統(tǒng)一返回格式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08
  • Spring Cloud Alibaba使用Sentinel實(shí)現(xiàn)接口限流

    Spring Cloud Alibaba使用Sentinel實(shí)現(xiàn)接口限流

    這篇文章主要介紹了Spring Cloud Alibaba使用Sentinel實(shí)現(xiàn)接口限流,本文詳細(xì)的介紹了Sentinel組件的用法以及接口限流,感興趣的可以了解一下
    2019-04-04
  • Spring Batch讀取txt文件并寫入數(shù)據(jù)庫的方法教程

    Spring Batch讀取txt文件并寫入數(shù)據(jù)庫的方法教程

    這篇文章主要給大家介紹了Spring Batch讀取txt文件并寫入數(shù)據(jù)庫的方法,SpringBatch 是一個(gè)輕量級(jí)、全面的批處理框架。這里我們用它來實(shí)現(xiàn)文件的讀取并將讀取的結(jié)果作處理,處理之后再寫入數(shù)據(jù)庫中的功能。需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-04-04
  • Java中解壓縮文件的方法詳解(通用)

    Java中解壓縮文件的方法詳解(通用)

    在軟件開發(fā)和數(shù)據(jù)處理領(lǐng)域,文件的解壓縮和壓縮是常見的任務(wù),下面這篇文章主要給大家介紹了關(guān)于Java中解壓縮文件的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06

最新評(píng)論

鹤岗市| 巴林右旗| 伊金霍洛旗| 萝北县| 宣化县| 双牌县| 宁晋县| 嘉兴市| 安化县| 丹棱县| 杭锦旗| 淄博市| 大余县| 思茅市| 吉木乃县| 西林县| 寻甸| 汕头市| 盐城市| 青铜峡市| 鄱阳县| 吴桥县| 措勤县| 铜陵市| 息烽县| 黎城县| 文登市| 辽阳县| 盈江县| 鄂州市| 惠来县| 响水县| 武义县| 彭州市| 息烽县| 洛隆县| 黄梅县| 兰考县| 盐边县| 新晃| 札达县|