libuv 原理_[Nodejs原理] 核心库Libuv入门(Hello World篇)

本文介绍了libuv,一个高性能的跨平台异步I/O库,主要用于Node.js。内容涵盖libuv的历史、特点,以及在MacOS上的安装步骤。通过一个简单的Hello World示例,展示了如何在C语言环境中使用libuv。此外,文章还提到了libuv在Unix和Windows系统上的事件循环实现方式。
摘要由CSDN通过智能技术生成

Libuv是什么?

1. 简介Libuv是一个高性能的,事件驱动的异步I/O库,它本身是由C语言编写的,具有很高的可移植性。libuv封装了不同平台底层对于异步IO模型的实现,所以它还本身具备着Windows, Linux都可使用的跨平台能力。

Libuv专为Node.js而设计,但是后来因为它这种事件驱动的异步IO的高效模型逐步被很多语言和项目都采纳而作为自身的底层库而使用,像 Luvit, Julia, pyuv, 还有很多基于它的 项目[1]

2. Libuv历史Nodejs刚出来的时候,底层并不是使用libuv,而是libev,libev本身也是一个异步IO的库,但是它只能在 POSIX[2]系统下使用。随着nodejs被越来越多人使用,由于windows的用户量巨大, 所以开始考虑Nodejs的跨平台能力。这时候Nodejs提供了libuv来作为抽象封装层,在Unix系统上,通过封装libev和libio调用linux的epoll 或 kqueue,在Windows 平台上的 IOCP[3]进行封装,自此之后Nodejs具备了跨平台能力,由Libuv作为中间层本身提供的跨平台的抽象,来根据系统决定使用libev/libio或IOCP,后来在node-v0.9.0版本中,libuv移除了libev的内容。

Libuv的特点·全功能的事件循环基于epoll、kqueue、IOCP、event ports·异步的TCP和UDP套接字·异步的DNS解析·异步的文件和文件系统操作·文件系统事件·ANSI转义代码控制的TTY·PC包括套接字共享,使用Unix域套接字或有名管道(Windows)·子进程·线程池·信号处理·高分辨率时钟·线程和同步原语

Libuv入门实战之Hello world

笔者是MacOS的系统,其他操作系统可以查看官方安装文档[4],接下下来介绍一下 libuv的安装与使用。

一、安装libuv

1.下载libuv的源码git clone https://github.com/libuv/libuv.git

2.下载完成后进入项目,依次执行下面命令,进行编译安装,遇到问题 可以在libuv的ISSUE[5] 下寻找答案或者留言提问。sh autogen.sh./configuremakemake checkmake install

3.安装完成后,查看一下自己本地 /usr/local/include/ 下是否有uv.h等头文件,如果存在即安装完成。

4.查看静态链接库文件/usr/local/lib/libuv.a 是否存在。

二、libuv的Hello word

下述示例默认有c语言环境,可以输入gcc验证一下,没有c环境的话请搜索安装gcc环境。这边的hello world参考的文档里推荐的入门示例[6]。

1.新建文件 main.c。vim main.c

2.文件写入如下内容。// main.c#include #include #include #include int main() {uv_loop_t *loop = malloc(sizeof(uv_loop_t));uv_loop_init(loop);printf('Now quitting.\n');uv_run(loop, UV_RUN_DEFAULT);uv_loop_close(loop);free(loop);return 0;}

3.如果提示没有uv.h,可以试试下面的头替代。#include

4.执行编译链接命令。gcc -o main main.c  -luv或者gcc -o main main.c  /usr/local/lib/libuv.a

5.执行可执行文件 ./main  进行验证。

6.程序解释:首先uv_loop_init开启了一个loop,uv_run执行,但是loop是空的,没有要处理的事件,然后很快uv_loop_close退出。

References

[1] Projects that use libuv: https://github.com/libuv/libuv/wiki/Projects-that-use-libuv

[2] 是一套操作系统 API 规范。一般而言,遵守 POSIX 规范的操作系统指的是 UNIX、Linux、Mac OS X 等:

[3] Windows 平台上的内核事件通知相应的机制Input/Output Completion Port:

[4] 安装文档: https://github.com/libuv/libuv#build-instructions

[5] ISSUE: https://github.com/libuv/libuv/issues

[6] 入门示例: https://github.com/luohaha/Chinese-uvbook/blob/master/source/basics_of_libuv.md#hello-world

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值