2013-02-11 2 views
1

2 개의 프로세스가 있으며, 하나의 프로세스가 높은 데이터 처리량으로 다른 프로세스와 통신하기를 원합니다. IPC (boost :: iterprocess)와 소켓을 시도했지만 성능/처리량이 너무 느립니다.IPC 또는 소켓보다 직접적으로 프로세스간에 통신이 가능합니까?

내 폴백 옵션은 두 번째 프로세스를 기술적으로 동일한 프로세스이므로 첫 번째 (DLL로드, '도구'생성 등)의 첨부 된 하위 프로세스로 실행하는 것이 가장 성능이 좋습니다. , 그리고 데이터를 전달하는 것은 DLL과 함께 인터페이스 함수를 호출하는 것입니다.

나는 이렇게하는 것을 피할 방법을 찾고 있지만 여전히 그 정도의 성능을 가지고 있습니다. 2 개의 프로세스가로드 할 수 있고 어떻게 든간에 메모리 공간을 공유 할 수있는 DLL을 설정할 수 있습니까? IPC와 소켓 만이 유일한 옵션입니까?

답변

0

질문에서 "IPC"란 무엇입니까? 소켓, 파이프, 공유 메모리는 IPC를 수행하는 모든 방법입니다. 그리고 예, Windows, Linux 및 기타 범용 시스템에서 공유 메모리를 사용할 수 있습니다. C++에서는 메모리 블록을 공유 (적어도 Windows에서는)로 선언하거나 메모리 매핑 파일 (MMF) 함수를 호출 할 수 있습니다. 리눅스와 BSD에서는 메모리 매핑 파일 기능도 사용합니다. MMF는 두 번째 프로세스를 DLL로 변환하는 것 외에 가능한 가장 빠른 방법입니다. 명명 된 파이프와 다른 것은 느립니다.

1

Windows에서는 명명 된 파이프를 사용할 수 있습니다. 한 때 로컬보다 더 효율적이었습니다. 그러나 그들은 유행을 벗어났습니다. 자세한 내용은 여기를 참조하십시오. microsoft docs on named pipes

0

로컬 프로세스의 경우 공유 파일을 사용할 수 있습니다. 파일을 메모리 맵핑하면 훨씬 빠릅니다.

관련 문제