libuv-example-01

了解libuv


更新記錄

item note
20160512 第一版

目錄


libuv

  • 參考來源,libuv.org
    • libuv is a multi-platform support library with a focus on asynchronous I/O
    • 同時實現不平台支援
    • node.js在v0.9.0之後去除libev改採用libuv library
    • 為了解決:传统输入输出函数(read, fprintf 等)的问题是它们都是 阻塞 的,來源
    • Libuv 采用另外一种方式处理阻塞任务, 即 异步 和 非阻塞 方式.大多数现代操作系统都提供了事件通知功能

libuv example 說明

helloword/main.c

  • 此處例啟動之後就會離開,因為沒有事件處理
1
2
3
4
5
6
7
8
9
10
11
12
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;
}

uv_loop_new / uv_run

  • uv_loop_init:
    初始化需要的物件內容

    • uv_loop_s

    • uv_timer_s:
      為了讓每個cb(即handle)處理時間一致, 但檢查有i/o在等則馬上設定timeout=0

    • heap_node:
      採用heap_node來找需要的handle,以縮短尋找時間

    • uv__io_s: i/o處里event

libuv

  • uv_run

    • uv_update_time
      取得系統時間,為了計算timeout

    • uv__run_timer
      開始處理每個handle,發生timerout則離開,防止阻塞

    • uv__run_pending

    • uv__io_poll

libuv

參考來源