동일한 장치에서 실행되는 서버와 통신해야하는 Android 및 iOS 기반 응용 프로그램에서 작업합니다. 현재 App 및 Server와 통신하기 위해 TCP 루프백 연결을 사용하고 있습니다 (앱은 사용자 계층으로 작성, 서버는 Android NDK를 사용하여 C ++로 작성).
상호 통신을 Unix Domain 소켓으로 대체하면 성능이 향상되는지 궁금합니다.
또는 일반적으로 Unix 도메인 소켓이 TCP 루프백 연결보다 더 나은 성능을 제공한다는 증거 / 이론이 있습니까?
답변
답변
이 벤치 마크 : https://github.com/rigtorp/ipc-bench
는 TCP 소켓, UDS (Unix Domain Sockets) 및 PIPE에 대한 지연 시간 및 처리량 테스트를 제공합니다.
Here you have the results on a single CPU 3.3GHz Linux machine :
TCP average latency: 6 us
UDS average latency: 2 us
PIPE average latency: 2 us
TCP average throughput: 0.253702 million msg/s
UDS average throughput: 1.733874 million msg/s
PIPE average throughput: 1.682796 million msg/s
66 % 지연 감소 및 거의 7 배 더 많은 처리량은 대부분의 성능에 중요한 소프트웨어에 자체 IPC 사용자 지정 프로토콜이있는 이유를 설명합니다.
답변
Redis 벤치 마크 는 유닉스 도메인 소켓이 TCP 루프백보다 훨씬 빠를 수 있음을 보여줍니다.
서버 및 클라이언트 벤치 마크 프로그램이 동일한 상자에서 실행되는 경우 TCP / IP 루프백 및 유닉스 도메인 소켓을 모두 사용할 수 있습니다. 플랫폼에 따라 유닉스 도메인 소켓은 TCP / IP 루프백 (예 : Linux)보다 약 50 % 더 많은 처리량을 달성 할 수 있습니다. redis-benchmark의 기본 동작은 TCP / IP 루프백을 사용하는 것입니다.
그러나이 차이는 처리량이 높은 경우에만 중요합니다.
답변
Unix 도메인 소켓은 두 피어가 동일한 호스트에있을 때 TCP 소켓보다 두 배 빠른 경우가 많습니다. Unix 도메인 프로토콜은 실제 프로토콜 제품군이 아니라 다른 호스트의 클라이언트와 서버에 사용되는 동일한 API를 사용하여 단일 호스트에서 클라이언트 / 서버 통신을 수행하는 방법입니다. Unix 도메인 프로토콜은 IPC (프로세스 간 통신) 방법의 대안입니다.