Jul 20, 2023

Asynchronous/Advanced Input/Output

IOAIO implements asynchronous I/O using whatever means your operating system supports. It is implemented as an interface to libeio.

Asynchronous means that operations that can normally block your program e.g. reading from disk will be done asynchronously the operation will still block, but you can do something else in the meantime. This is extremely useful for programs that need to stay interactive even when doing heavy I/O GUI programs, high performance network servers etc., but can also be used to easily do operations in parallel that are normally done sequentially, e.g. stat’ing many files, which is much faster on a RAID volume or over NFS when you do a number of stat operations concurrently.

While most of this works on all types of file descriptors for example sockets, using these functions on file descriptors that support nonblocking operation again, sockets, pipes etc. is very inefficient. Use an event loop for that such as the EV module IOAIO will naturally fit into such an event loop itself.

In addition to asynchronous I/O, this module also exports some rather arcane interfaces, such as madvise or linux’s splice system call, which is why the A in AIO can also mean advanced.

Checkout these related ports:
  • Zziplib - Library to provide transparent read access to zipped files
  • Zydis - Fast and lightweight x86/x86-64 disassembler library
  • Zycore-c - Support library with platform independent types, macros, etc for Zydis
  • Zthread - Platform-independent object-oriented C++ threading library
  • Zookeeper - Coordination Service for Distributed Applications
  • Zls - Zig LSP implementation + Zig Language Server
  • Zfp - High throughput library for compressed floating-point arrays
  • Zeal - Offline documentation browser
  • Zapcc - C++ caching compiler based on clang
  • Zanata-platform - Web-based translation platform
  • Zanata-cli - Zanata Java command line client
  • Z88dk - Complete Z80/Z180 development kit
  • Z80ex - ZiLOG Z80 CPU emulator library
  • Z80asm - Assembler for the Z80 microprocessor
  • Z80-asm - Z80 assembly code assembler and disassembler