Skip to content

perf: optimize MessageBatch.wait_drain() to avoid asyncio.wait overhead#1144

Open
gloryfromca wants to merge 1 commit intoaio-libs:masterfrom
gloryfromca:bug_fix_cpu_bound_wait_drain
Open

perf: optimize MessageBatch.wait_drain() to avoid asyncio.wait overhead#1144
gloryfromca wants to merge 1 commit intoaio-libs:masterfrom
gloryfromca:bug_fix_cpu_bound_wait_drain

Conversation

@gloryfromca
Copy link
Copy Markdown

Replace asyncio.wait([single_future]) with async_timeout.timeout() for better performance in high-frequency scenarios.

The original implementation using asyncio.wait() for a single future is inefficient because it creates sets and registers/removes callbacks on each call. Using async_timeout directly eliminates this overhead.

Performance improvement (tested):

  • P90 latency: 479ms, 469ms -> 296ms, 299ms (~37% reduction)
  • QPS: 111, 107 -> 142, 142 (~30% increase)

Changes

Fixes #

Checklist

  • I think the code is well written
  • Unit tests for the changes exist
  • Documentation reflects the changes
  • Add a new news fragment into the CHANGES folder
    • name it <issue_id>.<type> (e.g. 588.bugfix)
    • if you don't have an issue_id change it to the pr id after creating the PR
    • ensure type is one of the following:
      • .feature: Signifying a new feature.
      • .bugfix: Signifying a bug fix.
      • .doc: Signifying a documentation improvement.
      • .removal: Signifying a deprecation or removal of public API.
      • .misc: A ticket has been closed, but it is not of interest to users.
    • Make sure to use full sentences with correct case and punctuation, for example: Fix issue with non-ascii contents in doctest text files.

Replace asyncio.wait([single_future]) with async_timeout.timeout() for
better performance in high-frequency scenarios.

The original implementation using asyncio.wait() for a single future is
inefficient because it creates sets and registers/removes callbacks on
each call. Using async_timeout directly eliminates this overhead.

Performance improvement (tested):
- P90 latency: 479ms, 469ms -> 296ms, 299ms (~37% reduction)
- QPS: 111, 107 -> 142, 142 (~30% increase)
@gloryfromca
Copy link
Copy Markdown
Author

gloryfromca commented Dec 29, 2025

image image image

@gloryfromca
Copy link
Copy Markdown
Author

gloryfromca commented Dec 29, 2025

image image image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant