首页 > 其他分享 >libuv概述

libuv概述

时间:2024-05-09 09:56:18浏览次数:26  
标签:handle uv libev idle 概述 libuv loop

1、综述

  libuv是一个高性能的,事件驱动的I/O库,支持跨平台(由平台决定使用libev或IOCP),诞生自node.js。libev是网络库libevent的改进版,但libev在Windows下的性能不太好(使用select模型),而libuv则封装了Windows上的IOCP,性能更高,所以后来node.js使用libuv替换了libev。除了node.js以外,Rust编程语言也使用libuv。

  libuv使用异步的,事件驱动的编程风格,其核心工作是提供一个event-loop,以及基于I/O等其它事件的回调通知。异步事件驱动指的是我们可以提前注册感兴趣的事件,比如读取数据,然后在数据到来可读的时候得到通知。

  libuv还提供了一些核心工具,如非阻塞网络支持,异步文件系统访问,定时器,子进程等。

2、简单示例

   如下为开启一个loop的简单示例:

#include "uv.h"

int main()
{
    uv_loop_t* loop = (uv_loop_t*)malloc(sizeof(uv_loop_t)); //loop类型的handle
    uv_loop_init(loop); //初始化loop

    uv_run(loop, UV_RUN_DEFAULT); //启动event-loop,因为没有注册任何要监听的事件,所以会直接退出

    uv_loop_close(loop); //关闭loop,回收内存
    uv_fs_t t;
    free(loop);
}

  handle代表了持久性对象,相应的handle上有许多与之关联的request,如uv_loop_t、uv_idle_t、uv_tcp_t。request是短暂性对象(通常只维持在一个回调函数的时间),通常对映着handle上的一个I/O操作,用来传递上下文,如uv_fs_t、uv_req_t、uv_connect_t。handle和request都有一个void*类型的data域,可以用来存储自定义的上下文信息。

  下面是一个使用空转handle(uv_idle_t)的例子,当达到1000的计数后,关闭空转监视器,当找不到活着的事件监视器后,uv_run()也会退出:

#include "uv.h"

int64_t counter = 0;
void wait_for_a_while(uv_idle_t* handle) {
    counter++;

    if (counter >= 1000) {
        uv_idle_stop(handle);
        printf("stop Idling\n");
    }
}

int main()
{
        uv_idle_t idler; //空转handle
        uv_loop_t* loop = uv_default_loop(); //使用libuv提供的默认loop
    
        uv_idle_init(loop, &idler);
        uv_idle_start(&idler, wait_for_a_while);
    
        printf("Idling start\n");
        uv_run(loop, UV_RUN_DEFAULT);
    
        uv_loop_close(loop);
    
        printf("Idling end\n");
}

 

标签:handle,uv,libev,idle,概述,libuv,loop
From: https://www.cnblogs.com/milanleon/p/18163117

相关文章

  • 零、基于FPGA的贪吃蛇游戏设计概述
    零、基于FPGA的贪吃蛇游戏设计概述1. 代码结构系统模块如图所示:   snake_top.v:顶层模块,例化子模块,连接及与外部信号通信;game_ctrl_unit.v:游戏状态控制模块,控制状态转换和输出;snake.v:控制蛇身运动方向和蛇身增长;appple_generate.v:通过加法产生随机的食物坐标;VGA_ctr......
  • PCL 概述1
    由于工作需要,需学习并掌握PCL的基本子模块,现记录学习官网的文档。示例代码均参考官方文档目录0.PCLoverview1.PCDfiles2.ReadingdatafromPCDfiles3.WritingdatatoPCDfiles4.ConcatenatethepointsoftwoPointClouds5.PointCloudViewer6.planemodelsegmen......
  • Linux系统管理-系统概述
    一、系统概述3.系统安装1.系统安装1.选择第一项installcentos7,并且设置语言,推荐使用中文,简体中文2.字符界面安装选择最小或基本网页服务器即可,接下来就是进行磁盘分区,也可以自己分配或者系统自动分配3.手动分区里面也可以让系统自动创建,或者自己手动创建4.接受分区的修......
  • Spring SpringMVC概述
    SpringMVC框架主要用于跟客户端交互,包括请求和响应。  前端控制器的作用就是把一些功能封装,我们在开发时就不用再写一些繁杂的代码了SpringMVC使用DispatcherServlet作为前端控制器,DispatcherServlet本质其实是一个Servlet 原先我们在访问时,客户端发起请求直接找Servlet......
  • C#.NET体系图文概述—2024最全总结
    C#是一种简单、现代、面向对象和类型安全的编程语言。。.NET是由Microsoft创建的开发平台,平台包含了语言规范、工具、运行,支持开发各种应用,如Web、移动、桌面等。.NET框架有多个实现,如.NETFramework、.NETCore(及后续的.NET5+版本),以及社区版本Mono。除此以外,C#.NET体系还......
  • autoware学习(一)autoware概述
    简介代码结构├──autoware#主要源代码├──car_demo#主要与仿真相关├──citysim#主要与仿真相关├──drivers#不需要太关注,主要与上车测试相关└──vendor#不需要太关注,主要与上车测试相关├──autoware│  ├──common#通用功能│  ├─......
  • 数仓(一)数仓概述
    前几次内容分享,我们一共做了三件事:1.逐步搭建了传统hadoop大数据平台包括zookeeper、kafka、flume集群2.采集前端埋点到hdfs3.采集业务数据到hdfs这样数据都采集到HDFS上了,其实就是到了数仓了! 数据采集请看以下链接:前端埋点数据采集系列一、采集系统架构设计二、mock应......
  • C#.NET体系图文概述—2024最全总结
    C#是一种简单、现代、面向对象和类型安全的编程语言。。.NET是由Microsoft创建的开发平台,平台包含了语言规范、工具、运行,支持开发各种应用,如Web、移动、桌面等。.NET框架有多个实现,如.NETFramework、.NETCore(及后续的.NET5+版本),以及社区版本Mono。除此以外,C#.NET体系还......
  • LeakSanitizer概述与使用指南
    左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。公众号:一点sir,关注领取编程资料什么是LeakSanitizer?LeakSanitizer是一个强大的内存泄漏检测工具,主要用于C/C++程序的内存泄漏问题诊断。它通过在程序运行时监控动态内存分配和释放的行为,帮助开发者快速定位和解决......
  • 爬虫概述
    一、什么是爬虫爬虫(Crawler)是一种按照既定规则,在网络上自动爬取信息的程序或脚本。也称为网际网路蜘蛛(InternetSpider)或网络机器人(WebRobot)。爬虫可以自动抓取网络信息,主要用于网站数据采集、内容监测等。二、爬虫能做什么1、搜索引擎搜索引擎利用爬虫发现网络上的......