메시지 큐(Message Queue)

프로세스 간 통신(IPC)의 메시지 큐(Message Queue)는 프로세스 간에 데이터를 교환하는 메커니즘이다.

메시지 큐는 커널 내에 저장된 메시지의 연결 리스트로, 고유한 식별자로 구분된다.
이는 프로세스들이 비동기적으로 통신할 수 있게 해주는 IPC 메커니즘이다.

메시지 크기 제한과 시스템 리소스 사용 등의 단점도 고려해야 한다.
적절한 사용 시나리오를 파악하고 효과적으로 활용하는 것이 중요하다.

IPC - Message Queue
Source: https://www.javatpoint.com/ipc-using-message-queues

메시지 큐의 특징

  1. 커널 관리: 메시지 큐는 커널에 의해 관리되어 안정성이 높고 동기화가 용이하다.
  2. FIFO 순서: 메시지는 일반적으로 선입선출(FIFO) 순서로 처리된다.
  3. 비동기 통신: 송신 프로세스와 수신 프로세스가 동시에 활성화될 필요가 없다.
  4. 메시지 구조: 각 메시지는 타입 필드, 길이, 실제 데이터로 구성된다.
  5. 프로세스 분리: 메시지 큐를 사용하면 프로세스들이 서로 직접 연결되지 않아도 된다.

메시지 큐의 주요 시스템 호출

  1. ftok(): 고유한 키를 생성한다.
  2. msgget(): 메시지 큐를 생성하거나 기존 큐의 식별자를 반환한다.
  3. msgsnd(): 메시지를 큐에 추가한다.
  4. msgrcv(): 큐에서 메시지를 검색한다.
  5. msgctl(): 큐에 대한 다양한 작업을 수행한다.

메시지 큐 사용 방법

메시지 큐 생성:

  1. msgget() 시스템 콜을 사용하여 새로운 메시지 큐를 생성하거나 기존 큐에 접근한다.
  2. 큐 생성 시 접근 권한을 지정할 수 있어 보안을 관리할 수 있다.

메시지 송신:

  1. msgsnd() 시스템 콜을 사용하여 메시지를 큐에 추가한다.
  2. 메시지는 타입과 데이터로 구성된다.
  3. 큐가 가득 찬 경우, 송신자는 대기하거나 에러를 반환받을 수 있다.

메시지 수신:

  1. msgrcv() 시스템 콜을 사용하여 메시지를 큐에서 가져온다.
  2. 특정 타입의 메시지만 선택적으로 수신할 수 있다.
  3. 큐가 비어있는 경우, 수신자는 대기하거나 에러를 반환받을 수 있다.

메시지 큐의 장단점

장점

  • 커널 관리로 인한 높은 안정성
  • 비동기 통신 가능
  • 프로세스 간 느슨한 결합 제공

단점

  • 메시지 크기 제한
  • 시스템 리소스 사용
  • 복잡한 에러 처리 필요

참고 및 출처