published release of the library Libuv 1.45.0 , used for multiplexing compounds and asynchronous processing of input/output in many projects , aimed at high-performance processing of network and file queries, for example, in the platform node.js , DNS servers bind 9 and knot dns , http server h2o , lua-frame luvit , virtual machine moarvm , language julia and python-frame uvloop . The library allows you to organize a cycle of processing events in an insolurative mode, implemented on the basis of methods such as Epoll in Linux, Kqueue in BSD and MacOS, IOCP in Windows and Event Ports in Solaris. The project code is written in SI and spreads under the license mit.
For applications, multifaceted functions are available for working with TCP and UDP network connections in asynchronous mode, asynchronous resolution of DNS names, asynchronous work with files, tracking events in the file system, organizing IPC for joint access to sockets, and organizing a flower pool ( Thread Pool ), processing signals and the use of high -precision timers. The library also includes primitives for organizing multi -flow execution and synchronization of flows. In combination with the event processing cycle, two basic abstract high -level primitives are used: “descriptors” (Handles) for the implementation of long -live objects performing several operations, and “Requests” (Requists) to perform short -lived queries.
The key improvement in the new issue was implementation the long -awaited support of the interface of asynchronous input/output = “http : //kernel.dk/io_uring.pdf “> Io_uring provided by the Linux nucleus, starting with the release of 5.1, and remarkable support for Polling (polling) of the input/output and the possibility of work with both buffer and without buffering. In the API IO_URING, the core developers tried to eliminate the disadvantages of the old AIO interface. In terms of performance IO_URING, it is very close to spdk and significantly ahead of Libaio when working with the Pauling turned on.