Semaphores, critical sections and blocking queues explored in modern JS with Promises and async generators