문제

두 가지 프로세스가 있습니다. 하나는 데이터에 대해 다른 쿼리를 쿼리 할 것입니다. 제한된 시간 (초당 10000) 내에 막대한 양의 쿼리가 있으며 데이터 (> 100MB)는 초당 전송됩니다. , int) 내 질문은이 프로세스를 어떤 방식으로 연결 하는가?

공유 메모리, 메시지 대기열, LPC (로컬 절차 호출) 또는 기타 ....

또한 어떤 라이브러리를 제안하는지 물어보고 싶습니까? 그건 그렇고 MPI를 제안하지 마십시오. 편집 : Windows XP 32 비트

도움이 되었습니까?

해결책

한 단어: boost.interprocess. 실제로 빠르야한다면 공유 메모리가가는 길입니다. 운영 시스템이 가상 주소와 물리적 주소 사이의 일반적인 매핑을 수행하고 데이터에 대한 사본이 필요하지 않으므로 거의 오버 헤드가 없습니다. 동시성 문제를 찾아야합니다.

실제로 명령을 보내는 것입니다 일시 휴업 그리고 질문, 나는 메시지 대기열을 사용하겠다. 이전에 LocalHost 네트워크 프로그래밍을 사용하여이를 수행했으며 Boost에 대해 알기 전에 수동 공유 메모리 할당을 사용했습니다. 젠장 앱을 다시 작성해야한다면 즉시 부스트를 선택합니다. boost.lergropess는 이것을 더 쉽게 만듭니다. 확인 해봐.

다른 팁

공유 메모리를 사용하여 데이터를 저장하고 메시지 대기열을 사용하여 쿼리를 보냅니다.

데이터가 여러 유형으로 구성되거나/또는 뮤트와 같은 것이 필요한 경우 부스트를 사용하십시오. 그렇지 않으면 #pragma data_seg 또는 메모리 매핑 파일을 사용하여 메모리의 공유 섹션을 사용합니다.

두 번째 Marc의 제안 - 휴대 성 문제가 있거나 공유 메모리를 통해 MAP 표준 컨테이너 유형과 같은 멋진 작업을 수행하고 싶지 않으면 부스트를 귀찮게하지 않을 것입니다 (이 경우 확실히 부스트를 사용합니다).

그렇지 않으면 메시지 대기열과 공유 메모리는 처리하기가 매우 간단합니다.

공유 메모리를 사용하는 경우 회전 여부를 결정해야합니다. 동기화 및 공유 메모리에 데이터를 저장하는 데 세마포어를 사용하는 경우 메시지 대기열을 사용하는 것과 비교하여 성능 이점을 얻지 못하지만 동기화를 위해 원자 변수를 회전하면 귀하가 그 결과를 겪어야합니다.

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