The Batcher
When inserting thousands of records, individualawait repo.create() calls are slow due to network latency.
The Batcher queues items and flushes them in chunks, reducing network round-trips drastically.
ParallelExecutor
Processing many independent tasks (like calling external APIs or multiple distinct DB selects) sequentially is inefficient.ParallelExecutor runs them concurrently but with a limit (Semaphore) to avoid crashing your DB or exhausting connections.

