세마포어, 공유 메모리와 IPC

세마포어, 공유 메모리와 IPC

System V IPC 계열 함수들을 PHP에서 쓸 수 있게 감싼 모듈이에요. 세마포어, 공유 메모리, 프로세스 간 메시지 전달(IPC)을 모두 포함합니다.

출처: Semaphore, Shared Memory and IPC

본문

이 모듈들은 System V IPC 계열 함수들의 래퍼입니다. 세마포어(semaphores), 공유 메모리(shared memory), 프로세스 간 메시지 전달(IPC)을 포함해요.

세마포어는 현재 머신의 리소스에 대한 배타적 접근을 보장하거나, 동시에 특정 리소스를 사용할 수 있는 프로세스 수를 제한하는 데 쓸 수 있습니다.

이 모듈은 System V 공유 메모리를 사용하는 공유 메모리 함수도 제공해요. 공유 메모리는 전역 변수에 접근하는 용도로 쓸 수 있습니다. 서로 다른 httpd 데몬이나 심지어 Perl, C 같은 다른 프로그램도 이 데이터에 접근해 전역 데이터 교환을 할 수 있어요. 다만 공유 메모리는 동시 접근에 안전하지 않다는 점을 잊지 말아야 합니다. 동기화가 필요하면 세마포어를 사용하세요.

유닉스 OS가 공유 메모리에 두는 제한은 다음과 같아요.

  • SHMMAX — 공유 메모리의 최대 크기. 보통 131072 바이트
  • SHMMIN — 공유 메모리의 최소 크기. 보통 1 바이트
  • SHMMNI — 시스템의 공유 메모리 세그먼트 최대 개수. 보통 100
  • SHMSEG — 프로세스당 공유 메모리 세그먼트 최대 개수. 보통 6

메시지 함수들은 다른 프로세스와 메시지를 주고받는 데 씁니다. 유닉스 도메인 소켓을 별도로 설정할 필요 없이, 프로세스 간 데이터를 교환하는 간단하고 효과적인 수단을 제공해요.

플랫폼별 제약도 기억할 필요가 있어요. Windows에서는 공유 메모리 함수와 ftok()만 사용할 수 있고, 세마포어와 프로세스 간 메시지 함수는 지원되지 않습니다.

더 알아보기