Worker pool is the best option for your particular...
# coroutines
e
Worker pool is the best option for your particular problem. You don't need neither semaphore, nor its replacement. Worker pool directly solves this particular problem of limited-concurrency processing.