欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解c++ libuv工作隊列

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

1、說明

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

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

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

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

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

  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);

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

loop: 事件循環(huán)

req: 傳入到任務的數(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í)行的隊列中的任務,在任務中調(diào)用

req 為任務的參數(shù)

如果調(diào)用此方法取消了任務,則 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工作隊列的詳細內(nèi)容,更多關(guān)于c++ libuv工作隊列的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++回溯算法深度優(yōu)先搜索舉例分析

    C++回溯算法深度優(yōu)先搜索舉例分析

    回溯在迷宮搜索中使用很常見,就是這條路走不通,然后返回前一個路口,繼續(xù)下一條路?;厮菟惴ㄕf白了就是窮舉法,下面讓我們一起來看看回溯算法深度優(yōu)先搜索吧
    2022-03-03
  • C++JSON庫CJsonObject詳解(輕量簡單好用)

    C++JSON庫CJsonObject詳解(輕量簡單好用)

    CJsonObject是基于cJSON全新開發(fā)一個C++版的JSON庫,CJsonObject的最大優(yōu)勢是輕量簡單好用,開發(fā)效率極高,對多層嵌套json的讀取和生成使用非常簡單,喜歡的朋友一起看看吧
    2021-04-04
  • 快速入門的一些C\C++書籍

    快速入門的一些C\C++書籍

    這篇文章為大家精心推薦了一些快速入門的一些C\C++書籍,希望大家可以喜歡,對這門語言可以產(chǎn)生興趣,需要的朋友可以參考下
    2015-12-12
  • C++的數(shù)據(jù)類型你真的了解嗎

    C++的數(shù)據(jù)類型你真的了解嗎

    這篇文章主要為大家詳細介紹了C++的數(shù)據(jù)類型,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C語言實現(xiàn)員工工資管理系統(tǒng)

    C語言實現(xiàn)員工工資管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)員工工資管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 一文帶你學會C語言中的qsort函數(shù)

    一文帶你學會C語言中的qsort函數(shù)

    qsort函數(shù)是C語言的庫函數(shù),能實現(xiàn)對各種元素類型的比較,使用的基本思想是快速排序法,頭文件是<stdlib.h>,本文不講解具體實現(xiàn)原理,只對使用方法進行說明,希望對大家有所幫助
    2022-12-12
  • ?C++模板template原理解析

    ?C++模板template原理解析

    這篇文章主要介紹了C++模板template原理,函數(shù)模板代表了一個函數(shù)家族,該函數(shù)模板與類型無關(guān),在使用時被參數(shù)化,根據(jù)實參類型產(chǎn)生函數(shù)的特定類型版本
    2022-07-07
  • c語言簡單實現(xiàn)文件 r/w 操作方法

    c語言簡單實現(xiàn)文件 r/w 操作方法

    由于在 C 語言中 '\' 一般是轉(zhuǎn)義字符的起始標志,故在路徑中需要用兩個 '\' 表示路徑中目錄層次的間隔,也可以使用 '/' 作為路徑中的分隔符,本文重點給大家介紹用c語言簡單實現(xiàn)文件 r/w 操作方法,感興趣的朋友一起學習吧
    2021-05-05
  • C語言實現(xiàn)一個簡單的掃雷游戲

    C語言實現(xiàn)一個簡單的掃雷游戲

    掃雷是電腦上很經(jīng)典的游戲,特意去網(wǎng)上玩了一會,幾次調(diào)試之后,發(fā)現(xiàn)這個比三子棋要復雜一些,尤其是空白展開算法上和堵截玩家有的一拼,與實際游戲差別較大,不能使用光標,下面來詳解每一步分析
    2021-10-10
  • C語言雙向鏈表的原理與使用操作

    C語言雙向鏈表的原理與使用操作

    雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數(shù)據(jù)結(jié)點中都有兩個指針,分別指向直接后繼和直接前驅(qū)。本文主要介紹了C語言算法中雙向鏈表的實現(xiàn),需要的可以參考一下
    2022-05-05

最新評論