문제

두 가지 프로세스로 구성된 프로젝트가 있으며 빠르고 효율적인 방식으로 데이터간에 데이터를 전달해야합니다.

두 프로세스가 항상 동일한 컴퓨터에 존재하더라도 TCP를 사용하여 소켓을 사용할 수 있다는 것을 알고 있지만 이는 매우 효율적인 솔루션이 아닌 것 같습니다.

Linux에서 "파이프"를 사용하는 것에 대한 많은 정보가 있습니다. 그러나 나는 주로 Windows와 Linux (바람직하게는 크로스 플랫폼 라이브러리를 통해)를 위해 이것을 원합니다.

또 다른 중요한 것은 전체 응용 프로그램의 여러 인스턴스 (즉, 두 프로세스)를 지원해야한다는 것입니다.

또한 새로운 프로세스를 스폰하는 크로스 플랫폼 방법이 있습니까?

도움이 되었습니까?

해결책

IPC의 경우 Windows는 이름이 지정된 파이프를 지원합니다 처럼 Linux가합니다, 파이프 이름은 두 운영 체제 간의 경로 형식의 차이로 인해 다른 형식을 따른다는 점을 제외하고. 이것은 간단한 사전 처리기 정의로 극복 할 수있는 것입니다. 두 운영 체제 모두 파이프에서 비 블로킹 IO 및 select ()를 사용하여 IO 멀티플렉싱을 지원합니다.

다른 팁

보세요 boost.interprocess

boost.interprocess 공통 간호사 통신 및 동기화 메커니즘의 사용을 단순화하고 광범위한 범위를 제공합니다.

  • 공유 메모리.
  • 메모리 매핑 파일.
  • 세마포어, 뮤트, 조건 변수 및 업그레이드 가능한 뮤텍스 유형을 공유 메모리 및 메모리 매핑 파일에 배치합니다.
  • Unix/Windows SEM_OPEN/CreatesEmaphore API와 유사한 동기화 객체의 명명 된 버전.
  • 파일 잠금.
  • 상대 포인터.
  • 메시지 대기열.

boost.interprocess 또한 공유 메모리 또는 메모리 맵핑 파일의 동적 부분을 할당하는 고급 간식 메커니즘을 제공합니다 (일반적으로 고정 크기 메모리 세그먼트의 일부를 할당하기 위해). 이러한 메커니즘을 사용하여 Boost. Interprocess는 공유 메모리 및 메모리 매핑 파일에서 STL과 같은 컨테이너를 포함한 C ++ 객체를 구성하는 유용한 도구를 제공합니다.

  • 공유 메모리 또는 메모리 매핑 파일에서 익명 및 명명 된 개체의 동적 생성.
  • 공유 메모리/메모리 매핑 파일과 호환되는 STL과 같은 컨테이너.
  • 공유 메모리/메모리 매핑 된 파일을 준비한 STL과 같은 할당자는 여러 메모리 할당 패턴 (풀링)을 구현할 수 있습니다.

boost.interprocess 다음 컴파일러/플랫폼에서 테스트되었습니다.

  • Visual 7.1 Windows XP
  • Visual 8.0 Windows XP
  • GCC 4.1.1 Mingw
  • GCC 3.4.4 Cygwin
  • 인텔 9.1 Windows XP
  • GCC 4.1.2 Linux
  • GCC 3.4.3 Solaris 11
  • GCC 4.0 MACOS 10.4.1

평범한 오래된 TCP는 상당히 효율적으로 작동해야합니다. 내가 이해 한 바와 같이, Modern OS는 TCP 연결의 양쪽 끝이 동일한 기계에 위치 할 때 감지하고 일반적인 TCP 스택을 통해서보다 빠르고 가벼운 (파이프와 같은) 메커니즘을 통해 해당 데이터를 내부적으로 라우팅 할 것입니다.

따라서 이미 TCP에서 작동하는 코드가 있다면, 나는 그것에 충실하고 많은 추가 개발 시간을 많이 보낸 것을 피하십시오.

과잉 일 수 있지만 Apache 휴대용 런타임을 사용할 수 있습니다. 여기 스레드 및 프로세스 기능입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top