프로세스 간 통신의 장단점은 소켓과 공유 메모리를 통해 무엇입니까?


9

프로세스 간 통신을위한 더 많은 두 가지 옵션 중 하나는 다음과 같습니다.

  1. 공유 메모리
  2. 소켓

실제로 나는이 두 가지 옵션이 Intellij Idea에 의해 자바 애플 리케이션 디버깅에 노출되는 것을 보았다. 각 접근법의 장단점이 무엇인지 알고 싶습니다.


최신 방법은 D-Bus입니다.
ott--

@ ott-- D-Bus는 Unix 도메인 소켓 자체를 사용하지 않습니까?

@BrianMarshall 실제로, 도메인과 TCP / IP 소켓.
ott--

답변도 여기에 있습니다 : stackoverflow.com/a/1844919/632951
Pacerier

답변:


11

내 머리 꼭대기에서 각각에 대한 몇 가지 장점. 이러한 항목 중 일부는 모든 경우에 적용되지 않을 수 있습니다. 이것들은 일반적인 관찰입니다.

소켓

간단하고 통제 된. 거의 또는 전혀 수정하지 않고 필요에 따라 네트워크 소켓으로 확장 할 수 있습니다. 프로그래밍 모델은 직렬화가 필요하며, 결과적으로 A에서 B로 실제로 전송되는 데이터를 고려해야합니다. 동기화는 통신 메커니즘에 내장되어 있어야합니다. 다른 동기화가 필요하지 않습니다.

공유 메모리

syscall이 반드시 필요한 것은 아닙니다 (따라서 잠재적으로 더 빠름). 공유는 명시 적으로 데이터를 전송할 필요가 없습니다. 수신자가 검색하지 않은 데이터를 사용할 수 있습니다 (수신자가 사용하지 않는 데이터를 전송하는 데 대역폭을 낭비하지 않아도 됨). 직렬화 / 직렬화 단계가 없다는 것은 통신 오버 헤드에 소요되는 시간이 없음을 의미합니다.


4
+1 : 소켓은 분산 시스템으로 확장되지만 공유 메모리는 훨씬 빠릅니다.
mouviciel

@tylerl 왜 공유 메모리에 syscall이 필요하지 않습니까?
Geek

@Geek : 최신 OS에서 가상 메모리 관리가 어떻게 구현되는지 읽어보십시오. 기본적으로 후드 공유 메모리는 일반 프로세스 메모리와 거의 동일하게 구현됩니다. 동일한 물리적 페이지가 의도적으로 2 (또는 N) 개의 다른 프로세스로 매핑됩니다. 그러나 일단 맵핑이 설정되면 * px = 5는 px가 일반 변수를 가리키는 지 또는 공유 메모리 세그먼트 내부를 가리키는 지에 관계없이 동일한 명령어 세트를 생성합니다.
DXM

기술적으로 대상이 전송 형식으로 원시 바이트 스트림을 허용 할 수있는 경우 소켓을 통해 데이터를 직렬화 할 필요가 없습니다. 대부분의 사람들은 분명히 연재하여 누구에게나 보낼 수 있습니다.
gbjbaanb

1
@gbjbaanb 기술적 으로 인코딩 구조가 무엇이든 상관없이 데이터가 순차적 비트 문자열로 전송되면 데이터를 직렬화 한다고 생각 합니다.
tylerl

6

소켓은 일대일입니다. 동일한 프로세스를 여러 프로세스에 보내려면 여러 개의 소켓이 필요합니다. 공유 메모리를 사용하면 여러 판독기 및 여러 작성기를 가질 수 있습니다.

소켓은 리소스를 많이 사용합니다. 각각의 모든 메시지는 OS를 통해 전달됩니다. 공유 메모리를 사용하면 공유 메모리를 응용 프로그램의 메모리에 한 번 매핑 한 다음 사용할 수 있습니다. 그러나 공유 메모리를 사용할 때는 여전히 OS를 거쳐야합니다. 아래를 참조하십시오.

소켓은 동기화됩니다 (UDP를 사용하지 않는 한). 공유 메모리를 사용하면 다른 프로세스에 공유 메모리를 읽거나 쓰는 것이 괜찮거나 괜찮다는 것을 알리는 추가 메커니즘이 거의 필요합니다. 이렇게하지 않으면 손상된 메모리에 문제가 생길 수 있습니다. 예 : 프로세스 A가 청크 공유 메모리를 읽기 시작하지만 읽기 도중에 스왑 아웃된다고 가정하십시오. 프로세스 B는 동일한 공유 메모리 청크에 씁니다. 프로세스 A가 다시 시작되고 공유 메모리를 계속 읽을 때 읽은 것은 이전 및 새 데이터의 혼동입니다. 이를 방지하기 위해 공유 메모리를 사용할 때 여전히 OS를 사용합니다.

소켓 기반 응용 프로그램 집합을 네트워크 소켓을 사용하는 응용 프로그램으로 쉽게 변환 할 수 있습니다. 실험실의 모든 기계 또는 더 멀리 떨어진 곳으로 처리를 분산시킬 수 있습니다. 공유 메모리로는이 작업을 수행 할 수 없습니다. 공유 메모리 기반 솔루션으로 하나의 시스템에 고정되어 있습니다.

소켓은 적은 양의 데이터, 많은 양의 데이터를위한 공유 메모리를위한 것입니다. 다른 문제를 해결하기 위해 다른 메커니즘이 존재합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.