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

詳解c++ libuv工作隊列

 更新時間:2021年02月01日 10:19:53   作者:sherlock_lin  
這篇文章主要介紹了c++ libuv工作隊列的相關(guān)資料,幫助大家更好的理解和使用libuv,感興趣的朋友可以了解下

1、說明

libuv 提供了一個線程池,可用于運(yùn)行用戶代碼,libuv 中的工作隊列中的任務(wù)會在線程池中執(zhí)行

libuv 中的線程池在內(nèi)部用于運(yùn)行所有文件系統(tǒng)操作以及 getaddrinfo() 和 getnameinfo() 請求

libuv 中的線程池的默認(rèn)數(shù)量為4,可以在啟動時修改環(huán)境變量 UV_THREADPOOL_SIZE 來修改,最大值為 1024(1.30.0版本之前是128)

libuv 中的線程池是全局的,并在所有事件循環(huán)之間共享,當(dāng)特定的函數(shù)利用 uv_queue_work() 方法使用工作隊列時,libuv 會預(yù)分配線程池,以較小的內(nèi)存開銷(128個線程為1MB),來提高線程性能

以下三種類型的操作會在全局線程池中進(jìn)行:

  1. 文件系統(tǒng)操作;
  2. DNS函數(shù)(getaddrinfo 和 getnameinfo);
  3. 使用 uv_queue_work() 調(diào)度的用戶代碼;

需要注意的是,即使使用了線程池,libuv 的方法也不是線程安全的

2、API

2.1、uv_queue_work

int uv_queue_work(uv_loop_t* loop, 
         uv_work_t* req, 
         uv_work_cb work_cb, 
         uv_after_work_cb after_work_cb);

添加一個任務(wù)到工作隊列中,在主線程中調(diào)用

loop: 事件循環(huán)

req: 傳入到任務(wù)的數(shù)據(jù),一般使用 req.data 參數(shù)傳遞

work_cb: 執(zhí)行方法

after_work_cb: 執(zhí)行方法完成后執(zhí)行

work_cb 方法會在函數(shù)中執(zhí)行,after_work_cb 方法在創(chuàng)建線程中執(zhí)行

void (*uv_work_cb)(uv_work_t* req);
void (*uv_after_work_cb)(uv_work_t* req, int status);

如果調(diào)用 uv_cancel 方法取消了隊列,則 uv_after_work_cb 的 status 為 UV_ECANCELED

2.2、uv_cancel

int uv_cancel(uv_req_t* req);

取消未執(zhí)行的隊列中的任務(wù),在任務(wù)中調(diào)用

req 為任務(wù)的參數(shù)

如果調(diào)用此方法取消了任務(wù),則 after_work_cb 回調(diào)函數(shù)的 status 的值為 UV_ECANCELED;

3、代碼示例

#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <uv.h>

void print(uv_work_t *req)
{
  sleep(1);
  long num = (long)req->data;
  printf("thread id is: %ld, num is: %d\n", uv_thread_self(), num);
}

void after_print(uv_work_t *req, int status)
{
  printf("after print, req data is %d, status is %d\n", req->data, status);
}

int main()
{
  uv_loop_t *loop = uv_default_loop();
  uv_work_t req[5];

  for (int index = 0; index < 5; index++)
  {
    req[index].data = (void *)(long)index;
    uv_queue_work(loop, &req[index], print, after_print);
    sleep(1);
  }

  return uv_run(loop, UV_RUN_DEFAULT);
}

示例中的代碼,每次執(zhí)行 print() 方法都是在不同線程中,after_print() 方法和 main() 方法在同一個線程中

以上就是詳解c++ libuv工作隊列的詳細(xì)內(nèi)容,更多關(guān)于c++ libuv工作隊列的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c語言全局變量和局部變量問題及解決匯總

    c語言全局變量和局部變量問題及解決匯總

    局部變量能否和全局變量重名,如何引用一個已經(jīng)定義過的全局變量,全局變量可不可以定義在可被多個.C文件包含的頭文件中?為什么?,接下來為您一一介紹
    2013-01-01
  • C語言順序查找算法介紹及示例

    C語言順序查找算法介紹及示例

    順序查找又稱線性查找,主要用于在線性表中進(jìn)行查找。順序查找通常分為對一般的無序線性表的順序查找和對按關(guān)鍵字有序的順序表的順序查找,下面我們來一探究竟
    2022-08-08
  • C語言在輸入輸出時遇到的常見問題總結(jié)

    C語言在輸入輸出時遇到的常見問題總結(jié)

    大家在平時的做題中是否會遇到和我一樣的煩惱,題目的代碼已經(jīng)基本完成,但是在輸出時候,總是和題目給出的樣例輸出格式不同?,導(dǎo)致題目不能通過。為了解決這一煩惱,我總結(jié)了以下幾點(diǎn),需要的可以參考一下
    2022-09-09
  • C++實(shí)現(xiàn)屏幕截圖

    C++實(shí)現(xiàn)屏幕截圖

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)屏幕截圖功能,截圖自動保存為png格式文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Qt4和Qt5的信號和槽的使用區(qū)別

    Qt4和Qt5的信號和槽的使用區(qū)別

    本文主要介紹了Qt4 和 Qt5 的信號和槽的連接 connect 與斷開 disconnect 區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表存儲詳解

    C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表存儲詳解

    鏈表是一種物理存儲結(jié)構(gòu)上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。本文將和大家一起聊聊C語言中單鏈表的存儲,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • C語言三種函數(shù)調(diào)用約定_cdecl與_stdcall及_fastcall詳細(xì)講解

    C語言三種函數(shù)調(diào)用約定_cdecl與_stdcall及_fastcall詳細(xì)講解

    本篇文章使用的工具是vs2010,內(nèi)容可能涉及到匯編的知識,建議有一些匯編基礎(chǔ)的再來看,不過沒有匯編基礎(chǔ)也沒有關(guān)系,了解一下這三種調(diào)用約定即可
    2022-10-10
  • C++ DLL實(shí)現(xiàn)循環(huán)播放音樂的示例詳解

    C++ DLL實(shí)現(xiàn)循環(huán)播放音樂的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C++ DLL實(shí)現(xiàn)循環(huán)播放音樂的相關(guān)知識,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解下
    2024-03-03
  • c++ vector對象相關(guān)總結(jié)

    c++ vector對象相關(guān)總結(jié)

    這篇文章主要介紹了c++ vector對象的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-02-02
  • C++17結(jié)構(gòu)化綁定的實(shí)現(xiàn)

    C++17結(jié)構(gòu)化綁定的實(shí)現(xiàn)

    這篇文章主要介紹了C++17結(jié)構(gòu)化綁定的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評論

伊金霍洛旗| 林甸县| 西青区| 沂源县| 江永县| 丰城市| 唐河县| 松江区| 东台市| 宿迁市| 育儿| 迭部县| 崇左市| 武夷山市| 抚州市| 焉耆| 察隅县| 萨嘎县| 香格里拉县| 泰宁县| 尉犁县| 新乡县| 屏东县| 佛山市| 探索| 竹山县| 兴海县| 海宁市| 镇康县| 香港| 闽清县| 洪雅县| 壶关县| 江永县| 南郑县| 平潭县| 阿坝县| 湾仔区| 邯郸市| 北安市| 新野县|