Skip to content

Semaphore

동시에 실행되는 비동기 작업의 숫자를 제한하기 위해 사용할 수 있는 세마포어예요.

  • acquire 메서드를 실행하면, 허가를 받고 비동기 작업을 실행하거나, 허가를 받을 때까지 기다려요.
  • release 메서드를 실행하면, 대기 중인 다음 작업이 실행될 수 있도록 해요.

이 세마포어는 acquire를 실행한 순서에 따라 선착순으로 비동기 작업을 실행해요.

Signature

typescript
class Semaphore {
  public capacity: number;
  public available: number;

  constructor(capacity: number);

  acquire(): Promise<void>;
  release(): void;
}

프로퍼티

  • capacity (number): 동시에 실행될 수 있는 작업의 최댓값.
  • available (number): 현재 남은 실행 가능한 작업의 숫자.

메서드

  • acquire (() => Promise<void>): 허가를 받고 비동기 작업을 실행하거나, 허가를 받을 때까지 기다려요.
  • release (() => void): 대기 중인 다음 작업이 실행될 수 있도록 해요.

예시

typescript
const sema = new Semaphore(2);

async function task() {
  await sema.acquire();
  try {
    // This code can only be executed by two tasks at the same time
  } finally {
    sema.release();
  }
}

task();
task();
task(); // This task will wait until one of the previous tasks releases the semaphore.

MIT 라이선스에 따라 배포됩니다.