[Nodejs原理] 核心库Libuv入门(Hello World篇)
Libuv是什么?1. 简介
libuv是一个高性能的,事件驱动的异步i/o库,它本身是由c语言编写的,具有很高的可移植性。libuv封装了不同平台底层对于异步io模型的实现,所以它还本身具备着windows, linux都可使用的跨平台能力。
Libuv专为Node
.js而设计,但是后来因为它这种事件驱动的异步IO的高效模型逐步被很多语言和项目都采纳而作为自身的底层库而使用,像 Luvit, Julia, pyuv, 还有很多基于它的项目[1]
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的内容。
笔者是MacOS的系统,其他操作系统可以查看官方安装文档[4],接下下来介绍一下 libuv的安装与使用。
一、安装libuv1.下载libuv的源码
代码语言:javascript代码运行次数:0运行复制git clone https://github.com/libuv/libuv.git
2.下载完成后进入项目,依次执行下面命令,进行编译安装,遇到问题 可以在libuv的ISSUE[5] 下寻找答案或者留言提问。
代码语言:javascript代码运行次数:0运行复制sh autogen.sh./configuremakemake checkmake install
3.安装完成后,查看一下自己本地 /usr/local/include/ 下是否有uv.h等头文件,如果存在即安装完成。
4.查看静态链接库文件/usr/local/lib/libuv.a 是否存在。
下述示例默认有c语言环境,可以输入gcc验证一下,没有c环境的话请搜索安装gcc环境。这边的hello world参考的文档里推荐的入门示例[6]。
1.新建文件 main.c。
代码语言:javascript代码运行次数:0运行复制vim main.c
2.文件写入如下内容。
代码语言:javascript代码运行次数:0运行复制// 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,可以试试下面的头替代。
代码语言:javascript代码运行次数:0运行复制#include
4.执行编译链接命令。
代码语言:javascript代码运行次数:0运行复制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退出。
目前一个使用libuv做的入门实例已完成,接下来笔者将会解析一下内部的Api,做一些实例分享出来,有兴趣的请关注笔者微信公众号哦 。
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
如上内容均为自己总结,难免会有错误或者认识偏差,如有问题,希望大家留言指正,以免误人,若有什么问题请留言,会尽力回答之。如果对你有帮助不要忘了分享给你的朋友或者点击右下方的“在看”哦!也可以关注作者,查看历史文章并且关注最新动态,助你早日成为一名全栈工程师!
上一篇 : 用PHP实现弹出消息提示框的两种方法
下一篇 : KerasTuner超参数调优中集成自定义指标(F1、AUC等)的实践指南
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!