精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

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

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 <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;}

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

#include </usr/local/include/uv.h>

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

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Node.js 是如何跑起來的
IT牛人博客聚合
關于 libuv 各大模塊流程的總結
libuv之基礎
gevent-使用greenlet的基于協程的Python網絡庫
那些年我們追過的網絡庫(PartI)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 濮阳县| 阿尔山市| 通化县| 太康县| 南丰县| 文成县| 嘉荫县| 陕西省| 安陆市| 朝阳区| 确山县| 大足县| 高密市| 丹凤县| 库伦旗| 丽江市| 新疆| 甘孜| 云霄县| 观塘区| 嘉禾县| 合阳县| 宜章县| 隆林| 竹溪县| 沛县| 顺义区| 贵溪市| 噶尔县| 定远县| 报价| 于都县| 广河县| 布拖县| 庆元县| 廊坊市| 普安县| 昌黎县| 望江县| 麻栗坡县| 泽州县|