윈도우 IPC

윈도우즈 프로세스 간의 통신(Inter Process Communication)은 다음과 같은 것들이 있다.

ATOM :
- ATOM을 이용한 프로세스간 데이터 공유
- 255 바이트 까지 사용 가능

메시지( Message ) :
- SendMessage, PostMessage를 이용한  사용자 정의 메시지로 정보 교환
- 데이터는 wParam, lParam의 각각 4바이트씩 8바이트 값을 전달할 수 있다.

클립보드 :
- 클립 보드를 통한 대량의 정보 교환.  일반적인 용도로는 쓸 수 없다.

DDE ( Dynamic Data Exchange ) :
- 대화상자 또는 폼에서 동적인 데이터 정보 교환.

공유메모리( Shared Memory ) :
- 파일 맵핑을 이용한 메모리 공유.

메일슬롯 ( Mailslots ):  
- 메일슬롯 사용
- 단방향, 원격 프로세스간의 통신도 가능
- 우편에 비유

파이프 ( PIPE ):
- 파이프 사용
- 단방향, 양방향, 원격 프로세스간의 통신도 가능
- 전화에 비유

윈속 :
- 윈속을 이용해 TCP, UDP 사용

RPC ( Remote Procedure Call ):
- IPC의 확장으로 다른 프로세스간의 함수 호출에 대한 규약
- 원격 시스템간의 프로세스 통신도 가능

COM, DCOM :
- RPC의 확장
- 프로시저 호출에 관한 인터페이스 규약

참조 ) 윈도우 XP와 비스타에서의 속도 비교
Onega님 링크 :http://onegazhang.wordpress.com/2008/05/28/fastest-ipc-method-on-windows-xpvista/

한 프로세스에서 다른 프로세스로 2MB 사이즈를 1000번 보냈을 때이다.

IPC method

XP(seconds) Vista(seconds)

Remote memory access (ReadProcessMemory)

5.5

5.75

boost::interprocess::windows_shared_memory

7.1 5.9
Named Pipe 7.17 4.58
Mailslot 7.25 5.66
WM_COPYDATA 10.84 7.34

Boost.asio synchronous mode

18~20 17.4

boost::interprocess::shared_memory_object

49.9 36.2 / 35.9

MFC CSocket

150 ~ 212 37

또 다른 잡설:

쓰기 속도는 ReadProcessMemory와 MMF가 비슷하나 읽기는 MMF가 수배에서 수십배 빠르다는 말도 있다.   
결론은 ReadProcessMemory와 MMF가 제일 빠른가 보다. 둘중에 하나 사용해야겠네.

< 구현 >

네임드 파이프 ( Named Pipe )

ReadProcessMemory

DLL 데이터 공유