Libuv是一个多平台支持库,重点是异步I/O。它主要是由Node.js使用的,但也由Luvit,Julia,Uvloop等人使用。
由Epoll,Kqueue,IOCP,活动端口支持的全功能循环。
异步TCP和UDP插座
异步DNS分辨率
异步文件和文件系统操作
文件系统事件
ANSI逃生代码控制的TTY
具有插座共享的IPC,使用UNIX域插座或命名管(Windows)
儿童过程
线程池
信号处理
高分辨率时钟
螺纹和同步原语
从1.0.0版本开始,libuv遵循语义版本操作方案。 API更改和向后兼容性规则是SEMVER指示的规则。 Libuv将在主要版本中保持稳定的ABI。
可以在此处跟踪ABI/API更改。
Libuv获得了MIT许可证的许可。检查许可证和许可证文件。
该文档是根据CC划分的4.0许可证的。检查许可证文件。
位于文档/子目录中。它使用Sphinx框架,这使得可以以多种格式构建文档。
显示不同支持的建筑选择:
$ make help将文档构建为HTML:
$ make html将文档构建为HTML,并在更改时将其重新加载(这需要安装Sphinx-Autobuild,并且仅在UNIX上支持):
$ make livehtml将文档作为人类页面构建:
$ make man将文档构建为EPUB:
$ make epub注意:Windows用户需要使用make.bat而不是普通的“ make”。
文档可以在此处在线浏览。
测试和基准也可以用作API规范和使用示例。
这些资源不是由Libuv维护者处理的,可能已经过时了。请在打开新问题之前对其进行验证。
可以从GitHub存储库或下载网站下载Libuv。
在验证GIT标签或签名文件之前,需要导入相关密钥。密钥ID在维护器文件中列出,但也可以作为git blob对象可用,以易于使用。
以通常的方式导入钥匙:
$ gpg --keyserver pool.sks-keyservers.net --recv-keys AE9BC059从git blob对象导入键:
$ git show pubkey-saghul | gpg --importGIT标签与开发人员的密钥签名,可以验证如下:
$ git verify-tag v1.6.1从Libuv 1.7.0开始,签署了存储在下载站点中的TARBALLS,并随附一个随附的签名文件。一旦下载了发布tarball和签名文件,就可以验证该文件如下:
$ gpg --verify libuv-1.7.0.tar.gz.sign对于包括MacOS在内的Unix状平台,有两种构建方法:自动工具或CMAKE。
对于Windows,Cmake是唯一受支持的构建方法,并且具有以下先决条件:
PATH的工具。使用自动工具构建:
$ sh autogen.sh
$ ./configure
$ make
$ make check
$ make install用cmake构建:
$ mkdir -p build
$ (cd build && cmake .. -DBUILD_TESTING=ON) # generate project with tests
$ cmake --build build # add `-j <n>` with cmake >= 3.12
# Run tests:
$ (cd build && ctest -C Debug --output-on-failure)
# Or manually run tests:
$ build/uv_run_tests # shared library build
$ build/uv_run_tests_a # static library build与CMAKE交叉编译(不支持但通常有效):
$ cmake ../..
-DCMAKE_SYSTEM_NAME=Windows
-DCMAKE_SYSTEM_VERSION=6.1
-DCMAKE_C_COMPILER=i686-w64-mingw32-gcc$ brew install --HEAD libuv注意OS X用户:
确保您指定要在“ Archs”标志中构建的体系结构。您可以通过使用空间进行划界(例如“ x86_64 i386”)来指定多个。
$ git clone https://github.com/microsoft/vcpkg.git
$ ./bootstrap-vcpkg.bat # for powershell
$ ./bootstrap-vcpkg.sh # for bash
$ ./vcpkg install libuv您可以为libuv安装预制的二进制文件,也可以使用柯南(Conan)来构建它。使用以下命令:
conan install --requires= " libuv/[*] " --build=missing柯南维护者和社区贡献者保持了Libuv Conan食谱的最新状态。如果该版本已过时,请在ConancentErindex存储库上创建问题或提取请求。
一些测试对正时敏感。在缓慢或超载机器上可能需要放松测试超时:
$ env UV_TEST_TIMEOUT_MULTIPLIER=2 build/uv_run_tests # 10s instead of 5s 所有测试的列表都在test/test-list.h中。
此调用将导致测试驱动程序在子过程中叉和执行TEST_NAME :
$ build/uv_run_tests_a TEST_NAME此调用将导致测试驱动程序在同一过程中执行测试:
$ build/uv_run_tests_a TEST_NAME TEST_NAME从测试驱动程序过程中运行测试( build/uv_run_tests_a TEST_NAME TEST_NAME )时,诸如GDB和Valgrind之类的工具正常工作。
从测试驱动程序过程的孩子( build/uv_run_tests_a TEST_NAME )运行测试时,以叉子感知方式使用这些工具。
使用下面的fork模式设置:
$ gdb --args build/uv_run_tests_a TEST_NAME
(gdb) set follow-fork-mode child
...
使用--trace-children=yes参数:
$ valgrind --trace-children=yes -v --tool=memcheck --leak-check=full --track-origins=yes --leak-resolution=high --show-reachable=yes --log-file=memcheck-%p.log build/uv_run_tests_a TEST_NAME请参阅有关运行测试的部分。基准驱动程序为./uv_run_benchmarks_a ,基准在test/benchmark-list.h中列出。
检查支持的_platforms文件。
-fno-strict-aliasing建议在使用libuv的项目中打开-fno-strict-aliasing compiler Flag。在存在依赖严格混溶的编译器优化的情况下,在Libuv API中使用临时“继承”可能是不安全的。
MSVC没有等效的标志,但在撰写本文时也不需要它。(2019年12月)。
使用IBM XL C/C ++的AIX汇编需要12.1版或更高版本。
AIX对文件系统事件的支持要求安装非默认IBM bos.ahafs软件包。该软件包提供了autoconf检测到的AIX事件基础架构。 IBM文档更详细地描述了该软件包。
Z/OS汇编需要安装Zoslib。使用CMAKE构建时,使用标志-DZOSLIB_DIR指定通往Zoslib的路径:
$ (cd build && cmake .. -DBUILD_TESTING=ON -DZOSLIB_DIR=/path/to/zoslib)
$ cmake --build buildZ/OS创建系统V信号量和消息队列。除非事件循环关闭,否则这些过程终止后系统持续在系统上。
使用ipcrm命令手动清除系统V资源。
请参阅有关贡献的指南。