wheeltimer

Crates.iowheeltimer
lib.rswheeltimer
version0.2.0
created_at2025-05-26 07:38:08.559436+00
updated_at2025-06-06 07:08:57.723749+00
descriptionwheelTimer is Netty's HashedWheelTimer implementation based on Rust
homepage
repositoryhttps://github.com/cyj0122/wheeltimer
max_upload_size
id1689070
size45,993
(cyj0122)

documentation

README

wheeltimer

A high-performance asynchronous time wheel-based timer implementation in Rust, inspired by Netty's HashedWheelTimer.

This crate provides a scalable and thread-safe way to schedule delayed tasks using the time wheel algorithm, ideal for use cases such as connection timeouts, heartbeat checks, or any system requiring large numbers of scheduled events.

โœจ Features

  • โฑ๏ธ Asynchronous task scheduling with configurable tick duration
  • ๐Ÿงฎ Efficient time wheel structure (power-of-two sized buckets)
  • ๐Ÿงต Thread-safe design using Arc, RwLock, and Mutex
  • ๐Ÿšซ Support for cancelling pending timeouts
  • ๐Ÿ“ˆ Configurable maximum number of pending timeouts
  • ๐Ÿ“ฆ Easy-to-use API with support for async closures

๐Ÿ“ฆ Usage

Add this to your Cargo.toml

[dependencies]
wheeltimer = "0.2.0"

๐Ÿ”ง Example

use wheeltimer::WheelTimer;
use std::time::Duration;

#[tokio::main]
async fn main() {
    // Create a new timer with 10ms tick duration and 1024 buckets
    let timer = WheelTimer::new(Duration::from_millis(10), 1024, 100000).unwrap();

    // Start the timer
    timer.start().await;

    // Schedule a timeout after 2 seconds
    let timeout = timer.new_timeout(Duration::from_secs(2), 
        async move {
            println!("A delayed task is executed!");
        }
    ).await.unwrap();

    // Wait for the task to execute
    tokio::time::sleep(Duration::from_secs(3)).await;

    // Stop the timer
    timer.stop().await;
}

๐Ÿ› ๏ธ API Overview

  • WheelTimer::new(tick_duration, ticks_per_wheel, max_pending_timeouts) โ€“ Creates a new timer.
  • .start() โ€“ Starts the internal worker thread.
  • .new_timeout(delay, task) โ€“ Schedules a task to run after a delay.
  • .stop() โ€“ Stops the timer and cancels all pending timeouts.
  • .cancel() on Timeout โ€“ Cancels an individual timeout before it fires.

๐Ÿ“ Documentation

You can view the full documentation online:

๐Ÿ“š https://docs.rs/wheeltimer

Or build it locally:

cargo doc --open

๐Ÿงช Testing

Run tests:

cargo test

๐Ÿค Contributing

Contributions are welcome! Feel free to open issues or submit pull requests on GitHub.

๐Ÿ“„ License

Licensed under either of:

Commit count: 7

cargo fmt