`
aigo
  • 浏览: 2635749 次
  • 性别: 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 1.22.0动态链接库libuv.dll

    **libuv 1.22.0动态链接库libuv.dll详解** libuv是一个跨平台的异步I/O库,最初由Node.js项目开发并维护,现在已成为一个独立的开源库,广泛应用于需要高性能网络编程的场景。1.22.0是libuv在2018年7月发布的版本,...

    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 book 中文文档 An introduction to libuv

    《libuv书中文文档:An introduction to libuv》是关于libuv库的一个详细介绍。libuv是一个跨平台的异步I/O库,主要用于构建高性能的网络和文件系统应用程序。这本书的中文版提供了对libuv的入门指南,帮助开发者...

    libuv中文教程.pdf

    libuv是一个基于C语言编写的高性能、事件驱动的I/O库,它提供了跨平台的API,支持如Windows、Linux等操作系统。libuv在设计上强调了事件驱动编程范式,其核心是提供一个event-loop(事件循环),以及基于I/O和其他...

    libuv封装,封装libuv网络库

    Libuv 是一个跨平台的异步 I/O 库,被广泛应用于 Node.js 的底层,提供事件驱动的网络服务。它包含了多种抽象层,如 TCP、UDP、管道、TTY、文件系统操作以及定时器等,使得开发者能够编写高性能、非阻塞式的网络应用...

    libuv documentation.pdf

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

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

    《在Windows XP下使用VC6.0与libuv的详细指南》 libuv是一个跨平台的异步I/O库,广泛应用于Node.js等项目中,提供了丰富的网络和操作系统接口。然而,随着技术的发展,现代软件通常不再支持Windows XP,但有些遗留...

    编译好的libuv

    **编译好的libuv** Libuv是一个开源的、跨平台的异步I/O库,它在C语言中实现,但可以被多种编程语言所使用,如Node.js。这个压缩包包含的是已经编译好的libuv库,对于开发者来说,这意味着可以直接在项目中使用而...

    libuv源代码移植到CLion工程

    在IT行业中,libuv是一个非常重要的跨平台异步I/O库,主要用于处理各种操作系统下的网络和文件系统操作。它的设计目标是为Node.js提供底层支持,但也可以独立使用。CLion是一款由JetBrains公司开发的强大C/C++集成...

    libuv中文学习指南

    ### libuv中文学习指南知识点概览 #### 一、libuv简介 - **定义与功能**:`libuv`是一个跨平台的异步I/O库,用于开发高性能的应用程序和服务。它提供了一套统一的API,使开发者能够在Windows和Unix等不同操作系统...

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

    《基于libuv库的C++实现TCP通信详解》 在计算机网络编程中,TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。本项目着重探讨了如何利用libuv库在C++环境中实现TCP...

    VS2019编译好的libuv-v1.33.1库

    Libuv 是一个跨平台的异步 I/O 库,主要被用于 Node.js,但也可供其他 C/C++ 应用程序使用。在本文中,我们将深入探讨 Libuv v1.33.1 版本,以及如何在 Visual Studio 2019 (VS2019) 中编译和使用它。 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在centos下的编译安装.pdf

    在Linux操作系统中,尤其是在CentOS系统上,libuv库是一个高性能的跨平台异步I/O库。在进行服务器编程和网络编程中,libuv库为开发人员提供了方便处理异步事件和进行跨平台网络编程的能力。本文件将介绍如何在CentOS...

    libuv 编程指南 2.0

    libuv是一个用于高性能事件驱动I/O库的C语言库,它提供了跨平台的支持,在Windows和Unix系统上提供了统一的API。《libuv编程指南2.0》是关于如何使用libuv库的一本小型教程集合,旨在涵盖libuv的主要领域,但并不是...

    libuv源码libuv-1.x

    **libuv 源码分析:libuv-1.x** libuv 是一个跨平台的异步 I/O 库,主要用于处理网络和操作系统交互,它是 Node.js 的核心库之一,为 Node.js 提供了非阻塞的 I/O 操作。libuv-1.x 版本包含了该库的最新特性和改进...

    libuv 源码+demon

    libuv 是一个跨平台的异步 I/O 库,主要用于构建高性能的网络应用。这个库由 Node.js 团队开发并维护,被广泛应用于 Node.js 的底层实现,提供了一个简洁一致的 API 来处理操作系统级别的异步事件。在“libuv 源码+...

    VS2019-LibUV1.34.0动态链接库工程(有源码)

    LibUV 是一个跨平台的异步 I/O 库,它被广泛用于 Node.js 的底层实现,为应用程序提供高性能的网络和文件系统操作。在 Visual Studio 2019(VS2019)中编译 LibUV v1.34.0 动态链接库,可以让开发者在 C/C++ 项目中...

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

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

    libuv静态库

    标题“libuv静态库”指出我们关注的是一个名为“libuv”的软件库,且它是以静态库的形式存在的。在计算机编程中,静态库是一种编译时链接的库,它将库代码直接嵌入到目标程序中,使得程序运行时无需依赖外部的库文件...

Global site tag (gtag.js) - Google Analytics