`
aigo
  • 浏览: 2547404 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

libuv thead pool sample

阅读更多

libuv线程池示例,参考自官方代码:

libuv-1.8.0\test\test-threadpool.c

#include "uv.h"
#include "task.h"

static int work_cb_count;
static int after_work_cb_count;
static uv_work_t work_req;
static char data;


static void work_cb(uv_work_t* req) {
  ASSERT(req == &work_req);
  ASSERT(req->data == &data);
  work_cb_count++;
}


static void after_work_cb(uv_work_t* req, int status) {
  ASSERT(status == 0);
  ASSERT(req == &work_req);
  ASSERT(req->data == &data);
  after_work_cb_count++;
}


TEST_IMPL(threadpool_queue_work_simple) {
  int r;

  work_req.data = &data;
  r = uv_queue_work(uv_default_loop(), &work_req, work_cb, after_work_cb);
  ASSERT(r == 0);
  uv_run(uv_default_loop(), UV_RUN_DEFAULT);

  ASSERT(work_cb_count == 1);
  ASSERT(after_work_cb_count == 1);

  MAKE_VALGRIND_HAPPY();
  return 0;
}


TEST_IMPL(threadpool_queue_work_einval) {
  int r;

  work_req.data = &data;
  r = uv_queue_work(uv_default_loop(), &work_req, NULL, after_work_cb);
  ASSERT(r == UV_EINVAL);

  uv_run(uv_default_loop(), UV_RUN_DEFAULT);

  ASSERT(work_cb_count == 0);
  ASSERT(after_work_cb_count == 0);

  MAKE_VALGRIND_HAPPY();
  return 0;
}

 

libuv线程池容量设置

线程池的默认个数为4。

如果要修改线程池个数,方法如下:

 

#include <stdlib.h>  
setenv("UV_THREADPOOL_SIZE", "12", 1);

 

setenv是Linux平台函数,windows下对应的是_putenv_s,头文件相同: 

 

_putenv_s("UV_THREADPOOL_SIZE", "12");
 

 

 

如果有多个线程池,且不同线程池容量不同,那么需要每次执行uv_queue_work()之前调用setenv()来设置线程数

 

 

 

分享到:
评论

相关推荐

    libuv documentation.pdf

    * Thread Pool:线程池。 * Signal Handling:信号处理。 * Time Keeping:高精度时钟。 libuv 的文档提供了详细的设计概述、安装指南、API 文档和示例代码等。 libuv 的特点可以总结为: * 跨平台支持,支持多种...

    libuv book 中文文档 An introduction to libuv

    libuv book 中文文档 An introduction to libuv libuv book 中文文档 An introduction to libuv

    An Introduction to libuv

    “This ‘book’ is a small set of tutorials about using libuv [https://github.com/libuv/libuv] as a high performance evented I/O library which offers the same API on Windows and Unix. It is meant to ...

    libuv源码libuv-1.x

    libuv源码 libuv-1.x

    libuv-1.37.0.zip

    libuv is a multi-platform support library with a focus on asynchronous I/O.... * Thread pool * Signal handling * High resolution clock * Threading and synchronization primitives

    libuv_tcp, 使用libuv的tcp服务器和客户端包.zip

    libuv_tcp, 使用libuv的tcp服务器和客户端包 欢迎来到libuv_tcp维基 !简介:libuv_tcp是一个包含tcp服务器和客户端的C 类,它使用libuv包。用法:请参阅 [ test_tcpserver.cpp ] 1 和 [ test_tcpclient.cpp

    libuv-vc6-master_libuv在xp下使用vc6.0_

    libuv 在xp系统下的 vc6.0项目 兼容win xp

    libuv中文学习指南

    libuv中文入门学习书籍

    libuv在centos下的编译安装.pdf

    libuv在centos下的编译安装 主要章节: 一、 工具安装 二、 下载libuv源代码 三、 编译安装libuv 四、 测试验证

    libuv封装,封装libuv网络库

    封装libuv库,可以方便的继承实现自己的功能。便于以后的扩展。

    libuv-1.39.0.zip

    libuv下载

    libuv_tcp的基于libuv库的c++实现.zip

    基于libuv库的c++实现的tcp通讯,包括客户端和服务器

    libuv中文教程.pdf

    libvu官方教程的中文翻译版,详细讲述了libuv各个功能模块的使用方法,适用于刚入门学习libuv的人们

    编译好的libuv

    编译好的libuv ,包含dll和引入库lib和头文件,头文件精简后只需要包含uv.h即可

    libuv交叉编译到arm

    本资源在 debian 9 交叉编译器版本arm-linuxgnueabihf-gcc -v gcc version 6.3.0 20170516 (Debian 6.3.0-18) 下成功编译生成arm-linux下能运行的库,暂时编译成功还没进行测试,

    libuv 源码+demon

    libuv源码+demon,包含计时器、网络、管道、字符流等内容

    libuv c++封装最新代码

    libuv c++封装最新代码libuv c++封装最新代码libuv c++封装最新代码libuv c++封装最新代码libuv c++封装最新代码libuv c++封装最新代码libuv c++封装最新代码libuv c++封装最新代码libuv c++封装最新代码libuv c++...

    VS2019编译好的libuv-v1.33.1库

    用VS2019编译好的LibUV1.33.1的库,里面包含编译好的Release模式的libuv.lib库。

    libuv静态库

    iOS版本libuv.a静态库,支持i386 armv7 armv7s x86_64 arm64

    libuv使用范例

    基于VC2015++的libuv 使用范例基于VC2015++的libuv 使用范例基于VC2015++的libuv 使用范例基于VC2015++的libuv 使用范例基于VC2015++的libuv 使用范例基于VC2015++的libuv 使用范例基于VC2015++的libuv 使用范例基于...

Global site tag (gtag.js) - Google Analytics