亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

[Nodejs原理] 核心庫Libuv入門(Hello World篇)

絕刀狂花
發(fā)布: 2025-09-15 08:12:03
原創(chuàng)
282人瀏覽過

Libuv是什么?1. 簡介

libuv是一個(gè)高性能的,事件驅(qū)動(dòng)的異步i/o庫,它本身是由c語言編寫的,具有很高的可移植性。libuv封裝了不同平臺(tái)底層對(duì)于異步io模型的實(shí)現(xiàn),所以它還本身具備著windows, linux都可使用的跨平臺(tái)能力。

[Nodejs原理] 核心庫Libuv入門(Hello World篇)

Libuv專為Node.js而設(shè)計(jì),但是后來因?yàn)樗@種事件驅(qū)動(dòng)的異步IO的高效模型逐步被很多語言和項(xiàng)目都采納而作為自身的底層庫而使用,像 Luvit, Julia, pyuv, 還有很多基于它的項(xiàng)目[1]

2. Libuv歷史

Nodejs剛出來的時(shí)候,底層并不是使用libuv,而是libev,libev本身也是一個(gè)異步IO的庫,但是它只能在POSIX[2]系統(tǒng)下使用。隨著nodejs被越來越多人使用,由于windows的用戶量巨大,所以開始考慮Nodejs的跨平臺(tái)能力。

這時(shí)候Nodejs提供了libuv來作為抽象封裝層,在Unix系統(tǒng)上,通過封裝libev和libio調(diào)用linux的epoll 或 kqueue,在Windows 平臺(tái)上的IOCP[3]進(jìn)行封裝,自此之后Nodejs具備了跨平臺(tái)能力,由Libuv作為中間層本身提供的跨平臺(tái)的抽象,來根據(jù)系統(tǒng)決定使用libev/libio或IOCP,后來在node-v0.9.0版本中,libuv移除了libev的內(nèi)容。

[Nodejs原理] 核心庫Libuv入門(Hello World篇)
Libuv的特點(diǎn)Libuv入門實(shí)戰(zhàn)之Hello world

筆者是MacOS的系統(tǒng),其他操作系統(tǒng)可以查看官方安裝文檔[4],接下下來介紹一下 libuv的安裝與使用。

一、安裝libuv

1.下載libuv的源碼

代碼語言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
<pre class="brush:php;toolbar:false;">git clone https://github.com/libuv/libuv.git
登錄后復(fù)制

2.下載完成后進(jìn)入項(xiàng)目,依次執(zhí)行下面命令,進(jìn)行編譯安裝,遇到問題 可以在libuv的ISSUE[5] 下尋找答案或者留言提問。

代碼語言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
<pre class="brush:php;toolbar:false;">sh autogen.sh./configuremakemake checkmake install
登錄后復(fù)制

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

[Nodejs原理] 核心庫Libuv入門(Hello World篇)

4.查看靜態(tài)鏈接庫文件/usr/local/lib/libuv.a 是否存在。

[Nodejs原理] 核心庫Libuv入門(Hello World篇)
二、libuv的Hello word

下述示例默認(rèn)有c語言環(huán)境,可以輸入gcc驗(yàn)證一下,沒有c環(huán)境的話請搜索安裝gcc環(huán)境。這邊的hello world參考的文檔里推薦的入門示例[6]。

1.新建文件 main.c。

釘釘 AI 助理
釘釘 AI 助理

釘釘AI助理匯集了釘釘AI產(chǎn)品能力,幫助企業(yè)邁入智能新時(shí)代。

釘釘 AI 助理21
查看詳情 釘釘 AI 助理
代碼語言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
<pre class="brush:php;toolbar:false;">vim main.c
登錄后復(fù)制

2.文件寫入如下內(nèi)容。

代碼語言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
<pre class="brush:php;toolbar:false;">// main.c#include <stdlib.h>#include <stdio.h>#include <stdlib.h>#include <uv.h>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;}
登錄后復(fù)制

3.如果提示沒有uv.h,可以試試下面的頭替代。

代碼語言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
<pre class="brush:php;toolbar:false;">#include </usr/local/include/uv.h>
登錄后復(fù)制

4.執(zhí)行編譯鏈接命令。

代碼語言:javascript代碼運(yùn)行次數(shù):0運(yùn)行復(fù)制
<pre class="brush:php;toolbar:false;">gcc -o main main.c  -luv或者gcc -o main main.c  /usr/local/lib/libuv.a
登錄后復(fù)制

5.執(zhí)行可執(zhí)行文件 ./main 進(jìn)行驗(yàn)證。

[Nodejs原理] 核心庫Libuv入門(Hello World篇)

6.程序解釋:首先uv_loop_init開啟了一個(gè)loop,uv_run執(zhí)行,但是loop是空的,沒有要處理的事件,然后很快uv_loop_close退出。

目前一個(gè)使用libuv做的入門實(shí)例已完成,接下來筆者將會(huì)解析一下內(nèi)部的Api,做一些實(shí)例分享出來,有興趣的請關(guān)注筆者微信公眾號(hào)哦 。

References

[1]
登錄后復(fù)制
Projects that use libuv: https://github.com/libuv/libuv/wiki/Projects-that-use-libuv
[2]
登錄后復(fù)制
是一套操作系統(tǒng) API 規(guī)范。一般而言,遵守 POSIX 規(guī)范的操作系統(tǒng)指的是 UNIX、Linux、Mac OS X 等:
[3]
登錄后復(fù)制
Windows 平臺(tái)上的內(nèi)核事件通知相應(yīng)的機(jī)制Input/Output Completion Port:
[4]
登錄后復(fù)制
安裝文檔: https://github.com/libuv/libuv#build-instructions
[5]
登錄后復(fù)制
ISSUE: https://github.com/libuv/libuv/issues
[6]
登錄后復(fù)制
入門示例: https://github.com/luohaha/Chinese-uvbook/blob/master/source/basics_of_libuv.md#hello-world

如上內(nèi)容均為自己總結(jié),難免會(huì)有錯(cuò)誤或者認(rèn)識(shí)偏差,如有問題,希望大家留言指正,以免誤人,若有什么問題請留言,會(huì)盡力回答之。如果對(duì)你有幫助不要忘了分享給你的朋友或者點(diǎn)擊右下方的“在看”哦!也可以關(guān)注作者,查看歷史文章并且關(guān)注最新動(dòng)態(tài),助你早日成為一名全棧工程師!

以上就是[Nodejs原理] 核心庫Libuv入門(Hello World篇)的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件

每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費(fèi)商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)