2010-05-18 5 views
6

다른 모듈에서 IPC와 관련된 실시간 응용 프로그램을 구현하려고합니다. 모듈은 데이터 집약적 인 처리를 수행하고 있습니다. 나는 프로토 타입에서 IPC를위한 백본 (Activemq)으로 메시지 대기열을 사용하고 있는데, 이것은 쉽다. (나는 IPC 초보자라고 생각한다.)하지만 매우 느리다. 나는 미래에 그것을 다른 방법을 변경할 수 있도록 나는 IPC 부분을 격리 한IPC 속도 및 비교

  • :

    여기 내 상황입니다.

  • 다른 빠른 버전을 구현하는 데 3 주가 걸렸습니다. ;-(
  • IPC 내가 다른 IPC 방법으로 찾고있다

데리러 비교적 쉽고도 빠르게,하지만이어야합니다. 소켓, 파이프, 공유 메모리를 그러나, 나는 IPC에 경험이없고, 내가 IPC는?

감사합니다. 시작하는

답변

4

비슷한 질문을 나 자신에 직면 갔네.

릴리 안전한 방법이 될 것입니다 ... 어떤 삼주에서이 데모를 실패 할 수있는 방법은 분명히 없다 나는 다음 페이지가 도움이됨을 발견했습니다. - IPC performance: Named Pipe vs Socket (특히) 및 Sockets vs named pipes for local IPC on Windows?.

concenus처럼 들리 겠지만 이 실제로는이 될 것입니다.하지만 현재 시스템에 메시지 대기열이 있다면 오히려 ... 다른 구조 일 수 있습니다. . 소켓 및/또는 명명 된 파이프 더 쉽게 구현할 수 있고, 어느 쪽이든 스펙을 충족하면 거기에서 완료됩니다.

3

Windows에서는 특별한 종류의 공유 ​​메모리 기반 IPC 인 WM_COPYDATA를 사용할 수 있습니다. 이것은 오래된 기술이지만 간단한 방법입니다. "프로세스 A"는 메모리의 일부 데이터에 대한 포인터를 포함하는 메시지를 보내고 "프로세스 B"가 메시지를 처리 ​​(미안) 할 때까지 기다립니다. 데이터의 로컬 사본을 작성합니다. 이 방법은 꽤 빠르며 Windows 8 Developer Preview에서도 작동합니다 (내 benchmark 참조). 모든 종류의 데이터는 보낸 사람에 대해 일련 번호를 지정하고받는 사람 쪽에서 역 직렬화하여이 방법으로 전송할 수 있습니다. 통신을 비동기로 만들기 위해 발신자 및 수신자 메시지 대기열을 구현하는 것도 간단합니다.

+0

귀하의 벤치 마크에 따르면, 난 그냥 왜 win7 정말 나쁜 성능을 가지고 궁금해. – stanleyxu2005

+1

비교적 느린 싱글 코어 Atom CPU를 탑재 한 넷북이기 때문에 – kol

3

당신은이 블로그 게시물 https://publicwork.wordpress.com/2016/07/17/endurox-vs-zeromq/

을 체크 아웃 할 수는 기본적으로 그것은 비교, 여러 가지 전송 클래스에 동시에 포함 된 메시지를 전달할 수 POSIX 큐 ZeroMQ 대 (커널 큐 IPC)에 내장되어 엔듀로/X. (네트워크 소켓), ipc://, inproc://, pgm://epgm://입니다.

차트에서 볼 때 대기열에서 실행되는 Enduro/X가 소켓을 통해 더 많은 데이터 패킷을 수신하는 것을 볼 수 있습니다.

두 시스템 모두 초당 ~ 400 000 메시지로 실행되고 있지만 5KB 메시지로 커널 대기열이 더 잘 실행되고 있습니다.

Source: https://publicwork.wordpress.com/2016/07/17/endurox-vs-zeromq/

(이미지 출처 : https://publicwork.wordpress.com/2016/07/17/endurox-vs-zeromq/)


UPDATE : 답변으로 또 다른 업데이트가 너무 ipc://에 ZeroMQ를 실행 다시 실행 테스트를했다, 코멘트 노호하려면 참조 그림 :

Source: https://publicwork.wordpress.com/2016/07/17/endurox-vs-zeromq/

ZeroMQ ipc://이 더 좋지만 일부 범위에서는 Enduro/X가 더 나은 결과를 보여 주며 다시 ZeroMQ가됩니다.

따라서 IPC 선택은 수행하려는 작업에 따라 달라질 수 있습니다.

ZeroMQ IPC는 POSIX 파이프에서 실행됩니다. Enduro/x는 POSIX 대기열에서 실행됩니다.

+1

** 인용 된 테스트/비교 **는 동일한 전송 클래스에서 ZeroMQ를 사용하지 않음 ** **'tcp : //'** ~ **'ipc : //'**)? 사과 - 사과 비교 결과를 ** 제공 할 수 있습니까 ** ** Enduro/X와 ZeroMQ 모두 ** IPC **를 사용합니까? – user3666197

+1

위를보십시오, 나는 돌보아서 ipc : // –

+0

+1로 재 테스트했습니다. 다중 전송 클래스가 혼합 된 분산 시스템에서 BLOB가 처리되는 시나리오에서 Enduro/X는 어떻게 작동합니까? - tcp : // (클러스터 배포 SIG의 경우) + inproc : // (가장 빠른 대기 시간/가장 짧은 대기 시간의 경우) in-process message-passing) +'epgm : //' (최종 콘텐츠 스트리밍 용)? 주어진 크기의 입출력 쓰레드 (예를 들어'.Context()'엔진은 2 배, 4 배, 8 배, 16 배, 32 배, 64 배, 128 배, 256 배, 512 배,)? – user3666197