libuv is a multi-platform
C library that provides support for
asynchronous I/O
In computer science, asynchronous I/O (also non-sequential I/O) is a form of input/output processing that permits other processing to continue before the transmission has finished. A name used for asynchronous I/O in the Windows API is overlappe ...
based on
event loop In computer science, the event loop is a programming construct or design pattern that waits for and dispatches events or messages in a program. The event loop works by making a request to some internal or external "event provider" (that generally ...
s. It supports
epoll(4)
,
kqueue(2)
, Windows
IOCP
Input/output completion port (IOCP) is an application programming interface, API for performing multiple simultaneous asynchronous input/output operations in Windows NT versions 3.5 and later, AIX and on Solaris (operating system), Solaris 10 and ...
, and
Solaris
Solaris may refer to:
Arts and entertainment Literature, television and film
* ''Solaris'' (novel), a 1961 science fiction novel by Stanisław Lem
** ''Solaris'' (1968 film), directed by Boris Nirenburg
** ''Solaris'' (1972 film), directed by ...
event port
Event may refer to:
Gatherings of people
* Ceremony, an event of ritual significance, performed on a special occasion
* Convention (meeting), a gathering of individuals engaged in some common interest
* Event management, the organization of e ...
s. It is primarily designed for use in
Node.js
Node.js is an open-source server environment. Node.js is cross-platform and runs on Windows, Linux, Unix, and macOS. Node.js is a back-end JavaScript runtime environment. Node.js runs on the V8 JavaScript Engine and executes JavaScript code o ...
but it is also used by other software projects.
It was originally an abstraction around
libev or Microsoft
IOCP
Input/output completion port (IOCP) is an application programming interface, API for performing multiple simultaneous asynchronous input/output operations in Windows NT versions 3.5 and later, AIX and on Solaris (operating system), Solaris 10 and ...
, as
libev doesn't support IOCP on Windows. In node-v0.9.0's version of libuv, the dependency on libev was removed.
Features
From:
* Full-featured event loop backed by epoll, kqueue, IOCP, event ports
* Asynchronous
TCP and
UDP sockets
* Asynchronous
DNS
The Domain Name System (DNS) is a hierarchical and distributed naming system for computers, services, and other resources in the Internet or other Internet Protocol (IP) networks. It associates various information with domain names assigned to ...
resolution
* Asynchronous file and
file system
In computing, file system or filesystem (often abbreviated to fs) is a method and data structure that the operating system uses to control how data is stored and retrieved. Without a file system, data placed in a storage medium would be one larg ...
operations
* File system events
*
ANSI escape code
ANSI escape sequences are a standard for in-band signaling to control cursor location, color, font styling, and other options on video text terminals and terminal emulators. Certain sequences of bytes, most starting with an ASCII escape charac ...
controlled
TTY
*
IPC with socket sharing, using
Unix domain socket
A Unix domain socket aka UDS or IPC socket ( inter-process communication socket) is a data communications endpoint for exchanging data between processes executing on the same host operating system. It is also referred to by its address family AF_U ...
s or
named pipe
In computing, a named pipe (also known as a FIFO for its behavior) is an extension to the traditional pipe concept on Unix and Unix-like systems, and is one of the methods of inter-process communication (IPC). The concept is also found in OS/2 and ...
s (Windows)
*
Child process
A child process in computing is a process created by another process (the parent process). This technique pertains to multitasking operating systems, and is sometimes called a subprocess or traditionally a subtask.
There are two major procedures ...
es
*
Thread pool
* Signal handling
* High resolution clock
* Threading and synchronization primitives
Origin of the name
According to libuv developer
Ben Noordhuis, the name libuv originally had no specific naming, but as people kept asking about it, so they made something up. They came up with
Unicorn
The unicorn is a legendary creature that has been described since antiquity as a beast with a single large, pointed, spiraling horn projecting from its forehead.
In European literature and art, the unicorn has for the last thousand years o ...
Velociraptor
''Velociraptor'' (; ) is a genus of small dromaeosaurid dinosaur that lived in Asia during the Late Cretaceous epoch, about 75 million to 71 million years ago. Two species are currently recognized, although others have been assigned in the pa ...
, which became the logo of the library.
See also
*
libevent
libevent is a software library that provides asynchronous event notification. The libevent API provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached. libeven ...
*
libev
*
Reactor pattern
The reactor design pattern is an event handling pattern for handling service requests delivered concurrently to a service handler by one or more inputs. The service handler then demultiplexes the incoming requests and dispatches them synchronou ...
References
External links
*
* {{GitHub, libuv/libuv
An Introduction to libuvlibuv API documentation
C (programming language) libraries
Events (computing)
Free computer libraries