#pingora #non-blocking #async #networking #async-networking #async-io

pingora-timeout

Highly efficient async timer and timeout system for Tokio runtimes

5 releases (3 breaking)

0.4.0 Nov 1, 2024
0.3.0 Jul 12, 2024
0.2.0 May 10, 2024
0.1.1 Apr 18, 2024
0.1.0 Feb 27, 2024

#743 in Asynchronous

Download history 13361/week @ 2024-10-30 13490/week @ 2024-11-06 13950/week @ 2024-11-13 16148/week @ 2024-11-20 15044/week @ 2024-11-27 13943/week @ 2024-12-04 16015/week @ 2024-12-11 10580/week @ 2024-12-18 5564/week @ 2024-12-25 8425/week @ 2025-01-01 16418/week @ 2025-01-08 13290/week @ 2025-01-15 16932/week @ 2025-01-22 21092/week @ 2025-01-29 23549/week @ 2025-02-05 17766/week @ 2025-02-12

81,781 downloads per month
Used in 29 crates (7 directly)

Apache-2.0

23KB
398 lines

A drop-in replacement of tokio::time::timeout which is much more efficient.

Similar to tokio::time::timeout but more efficient on busy concurrent IOs where timeouts are created and canceled very frequently.

This crate provides the following optimizations

  • The timeouts lazily initializes their timer when the Future is pending for the first time.
  • There is no global lock for creating and cancelling timeouts.
  • Timeout timers are rounded to the next 10ms tick and timers are shared across all timeouts with the same deadline.

Benchmark:

438.302µs total, 4ns avg per iteration

v.s. Tokio timeout():

10.716192ms total, 107ns avg per iteration

Dependencies

~2.6–9MB
~74K SLoC