Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

lithdew/pike

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pike

A minimal cross-platform high-performance async I/O library written in Zig.

Features

  • Reactor/proactor-based I/O notification support
    • epoll (linux)
    • kqueue (darwin)
    • i/o completion ports (windows)
  • Async POSIX socket support
    • bind, listen, connect, accept
    • read, recv, recvFrom
    • write, send, sendTo
    • get/set socket options
  • Async Windows socket support
    • bind, listen, connect, accept
    • read, recv, recvFrom
    • write, send, sendTo
    • get/set socket options
  • Async signal support
    • signalfd for epoll (linux)
    • EVFILT_SIGNAL for kqueue (darwin)
    • SetConsoleCtrlHandler for i/o completion ports (windows)
  • Async event support
    • sigaction (posix)
    • SetConsoleCtrlHandler (windows)

Design

Notifier

A Notifier notifies of the completion of I/O events, or of the read/write-readiness of registered file descriptors/handles.

Should a Notifier report the completion of I/O events, it is designated to wrap around a proactor-based I/O notification layer in the operating system such as I/O completion ports on Windows.

Should a Notifier report the read/write-readiness of registered file descriptors/handles, it is designated to wrap around a reactor-based I/O notification layer in the operating system such as epoll on Linux, or kqueue on Darwin-based operating systems.

The Notifier's purpose is to drive the execution of asynchronous I/O syscalls upon the notification of a reactor/proactor-based I/O event by dispatching suspended asynchronous function frames to be resumed by a thread pool/scheduler (e.g. kprotty/zap).

Handle

A Handle's implementation is specific to a Notifier implementation, though overall wraps around and represents a file descriptor/handle in a program.

Subject to the Notifier implementation a Handle's implementation falls under, state required to drive asynchronous I/O syscalls through a Handle is kept inside a Handle.

An example would be an intrusive linked list of suspended asynchronous function frames that are to be resumed upon the recipient of a notification that a file descriptor/handle is ready to be written to/read from.

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  
Morty Proxy This is a proxified and sanitized view of the page, visit original site.