Skip to content

⚡ Optimize Library Updates Concurrency#62

Merged
Aatricks merged 1 commit intomainfrom
perf/library-updates-worker-pool-9253755730591001458
Mar 1, 2026
Merged

⚡ Optimize Library Updates Concurrency#62
Aatricks merged 1 commit intomainfrom
perf/library-updates-worker-pool-9253755730591001458

Conversation

@Aatricks
Copy link
Owner

💡 What: Replaced the unbounded coroutine launch pattern (.map { async { ... } }) in LibraryRepository.refreshLibraryUpdates with a bounded worker pool pattern using Channel.

🎯 Why: The previous approach, while limiting concurrent network execution via a Semaphore(5), still spawned an unbounded number of coroutines (one for every active library group). For users with large libraries, this caused significant CPU and memory overhead purely from coroutine allocation and scheduling before any work even started. The worker pool limits both concurrency and coroutine allocation to exactly 5 workers.

📊 Measured Improvement: Modified LibraryRepositoryBenchmarkTest to simulate 10,000 novels and removed artificial delays to measure pure overhead.

  • Baseline (Unbounded async): ~1136ms
  • Optimized (Worker Pool): ~133ms
  • Result: ~88% reduction in overhead for large library updates.

PR created automatically by Jules for task 9253755730591001458 started by @Aatricks

Replaced the unbounded `.map { async { ... } }` pattern in `refreshLibraryUpdates`
with a bounded `Channel` worker pool pattern. This drastically reduces
the overhead of creating thousands of coroutines when updating large libraries.

The new implementation uses a single unbuffered channel and launches exactly
5 worker coroutines to consume from it, matching the previous `Semaphore(5)`
behavior but avoiding the high coroutine allocation and scheduling overhead.

The `LibraryRepositoryBenchmarkTest` was updated to accurately simulate a large
number of novels (10,000) without artificial network delays to demonstrate the
pure overhead. The benchmark results showed a decrease in time from ~1100ms
to ~130ms, confirming a significant improvement in CPU/memory efficiency.

Co-authored-by: Aatricks <113598245+Aatricks@users.noreply.github.com>
@google-labs-jules
Copy link
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@Aatricks Aatricks merged commit c5483f8 into main Mar 1, 2026
1 check failed
@Aatricks Aatricks deleted the perf/library-updates-worker-pool-9253755730591001458 branch March 1, 2026 19:31
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