스레드 간 통신보다 프로세스 간 통신이 어려운 이유
프로세스는 생성되면서 PC를 포함하여 메모리 공간 등을 복사하여 별도의 자원을 할당하지만, 스레드는 메모리 공간과 자원을 공유하기 때문이다
- 따라서 프로세스는 통신할 수 있는 공간이 없어 통신을 위한 별도의 공간을 만들어주어야 한다.
> 공유 메모리가 각 프로세스에게 첨부하는 방식으로 작동
> 각 프로세스가 메모리 영역에 첨부됨
하나의 프로세스는 데이터를 Write만, 다른 하나의 프로세스는 데이터를 Read만 가능
=> 이러한 특징으로 반이중 통신이라 부른다.
1. 익명 파이프
> 부모-자식 or 형제 프로세스 간 통신에 사용
> 외부 프로세스에서 사용 불가
단점
2. 네임드 파이프
소켓
컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점
클라이언트와 서버가 소켓을 통해 통신하는 구조, 원격에서 프로세스 간 데이터를 공유할 때 사용
전이중(양방향) 통신 가능
서버/클라이언트 환경 구축 시 용이
소켓통신 과정
서버
- socket 함수를 사용하여 서버의 소켓을 연다.
- 열어놓은 소켓에 서버의 IP, PORT를 바인딩한다.
- listen 함수를 사용하여 메시지를 받을 수 있는 상태로 전환한다.
- 클라이언트가 보낸 connect request를 받고 클라이언트와 통신하기 위한 파일 디스크립터를 생성한다.
- send 함수를 통해서 메시지를 주거나 recv 함수를 통해 메시지를 받는다.
- 열어놓은 소켓을 닫는다.
클라이언트
- socket 함수를 사용하여 클라이언트의 소켓을 연다.
- 서버에 connect request를 전송한다.
- 메시지를 보내거나 받는다.
- 소켓을 닫는다.
메시지 지향 미들웨어 (Message Oriented Middleware: MOM)을 구현한 시스템
MOM은 비동기 메시지를 사용하는 응용 프로그램 간의 데이터 송수신
대용량 데이터를 처리하기 위한 배치 작업이나 채팅서비스, 비동기 데이터 처리 시 사용
기존에 분산되어 있던 데이터 처리를 한 곳에 집중하면서, 메시지 브로커를 두어서 필요한 프로그램에 작업을 분산시키는 방법을 하는 것이 목적
다른 프로세스와 메시지를 교환할 때 AMQP (Advanced Message Queuing Protocol)을 이용
AMQP란?
메시지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜
AMQP의 정의 기능들은 메시지 지향, 큐잉, 라우팅, 신뢰성, 보안
장점
> 메모리 맵 파일 사용 이전 혹은 이후에만 파일의 크기 바꾸기 가능
분산 네트워크 망에서 많이 사용되는 방식
다른 주소 공간의 procedure를 실행할 때, 원격 세부사항에 관한 명시적인 코딩없이 마치 local 컴퓨터의 procedure를 호출하는 것처럼 사용하는 방식
stub을 통해서 마치 자신의 디스크에 존재하는 것처럼 착각을 일으켜 사용하는 방식
스텁
리눅스에서 공유 라이브러리의 일부분 중 하나
프로시저 : 루틴, 서브루틴, 함수와 같은 뜻으로 사용되며 하나의 프로시저는 특정 작업을 수행하기 위한 프로그램의 일부 => 어떤 행동을 수행하기 위한 일련의 작업 순서
IPC 통신에서 프로세스 간 데이터를 동기화하고 보호하기 위해 세마포어와 뮤텍스 사용
세마포어
공유된 자원의 데이터 혹은 임계영역등에 여러 프로세스 혹은 스레드가 접근하는 것을 막아줌
뮤텍스
공유된 자원의 데이터 혹은 임계영역 등에 하나의 프로세스 혹은 스레드가 접근하는 것을 막아줌