IPC(Inter Process Communication)
스레드 간에 데이터를 주고받기 위한 기술들.
스레드는 다른 프로세스, 또는 다른 PC에 위치할 수 있다.
분류: message Passing, Synchronization, Shared Memory, RPC(Remote Process Calls)
목적: 자료 공유, 연산 속도 향상, 모듈성, 편의성
기법
File
달리 할 말이 없네
Signal
POSIX 시스템에서 주로 사용하는 IPC. 프로세스에 비동기 Notification을 날리는 방식.
시그널 발생하면 OS는 프로세스의 동작을 멈추고 시그널 핸들러를 실행.
디폴트 시그널 핸들러를 실행하거나 프로세스가 정의하고 등록한 핸들러를 실행할 수도 있음.
문제점 정리는 귀찮아서 스킵.
사용자 정의 시그널 핸들러 (다른 방식도 있는데...써본 적도 없고 귀찮기도 하고)
void my_handler (int signum) { ... }
void main() {
...
signal( SIGBREAK, SIG_IGN );
if( signal( SIGTERM, my_handler )== SIG_IGN )
signal( SIGTERM, SIG_IGN );
...
}
Socket
TCP/UDP, IP를 위해 소켓을 쓰기도 하지만…소켓은 원래 IPC를 목적으로 만들어졌음.
로컬 IPC로 쓰려면 socket() 함수의 첫 번째 인자(domain)를 PF_UNIX로.
Message Queue
Pipe
POSIX 시스템 지원
Named Pipe
POSIX, Window 시스템 지원
Semaphore
POSIX 시스템 지원
Shared Memory
POSIX 시스템 지원
Message Passing
병렬프로세스, 분산컴퓨팅과 같은 분야에 주로 사용. 물론 직접 만져본 적이 없다.
Memory-Mapped File
Windows IPC
Clipboard
COM
Data Copy
DDE
File Mapping
Mailslots
Pipes
RPC
Windows Sockets
Threads Synchronization
윈도우에서 제공하는 스레드 동기화를 방법으로는-
이벤트, 크리티컬 섹션(단일프로세스), 뮤텍스(멀티프로세스), 세마포어가 있음.