문제

나는 질문을 보았다 : 두 개의 개별 Java 데스크탑 응용 프로그램 간의 통신 (답 : JGroups) 그리고 나는 Javagroup 또는 Straight RMI로 무언가를 구현할 생각이지만 속도는 본질입니다. 나는 많은 양의 데이터를 보내지 않고 (MIDI 메시지의 내용, 각각 3 바이트, 3 밀리 초마다 두 개의 메시지를 말하는 것 이상) 이것은 모두 같은 기계에있을 것입니다. 동일한 물리적 기계의 RMI/JGroup이 느리다고 생각하는 것이 멍청한가요?

(내 생각은 이미 일부를 얻었 기 때문에 1m 이상의 대기 시간을 감당할 수 없다는 것입니다. 그러나이 맥락에서 속도에 대해 가장 잘 이야기하는 방법을 잘 모르겠습니다.)

내 진짜 질문은 다음과 같습니다. Java에서 TCP/IP보다 빠른 일을 통과하는 InterApp 커뮤니케이션 옵션이 있습니까? 나는 이미 구현해야 할 JNI 가능성이 아니라 이미 Java로 구현 된 것들을 의미합니다 :)

나는 일찍 최적화하지 말고 미안보다 안전하다는 것을 알고 있습니다.

도움이 되었습니까?

해결책

Java에서 TCP/IP보다 빠른 일을 통과하는 InterApp 커뮤니케이션 옵션이 있습니까?

크게 ... afaik.

그러나 나는 당신이 이것에 대해 잘못된 방식으로 생각하고 있다고 생각합니다. 작은 메시지를 옮기고 있다고 가정하면, 주요 성능 킬러는 바이트가 이동하는 속도가 아닌 전화를하는 오버 헤드가됩니다. 이러한 오버 헤드에는 시스템 호출을 수행하는 데 걸리는 시간, 클라이언트 및 서버 측의 프로세스 컨텍스트를 전환하고 커널 내의 메시지 패킷 헤더를 처리하고 패킷을 라우팅하기 위해 시간이 포함됩니다. 그리고 동기식 RPC와 유사한 상호 작용은 답장을 기다리는 것을 수반합니다. 즉, 앱 -> 서버 -> 왕복 시간.

더 큰 처리량을 얻는 방법은 다음에 집중하는 것입니다.

  • 응용 프로그램에 필요한 RPC의 수를 줄입니다. 예를

  • 동기 상호 작용을 비동기 상호 작용으로 바꾸는 방법을 살펴 봅니다. 예를 들어 RPC 기반 기술보다는 메시지 기반을 사용합니다.

다른 팁

속도가 본질이라면 같은 스레드에서 호출해야합니다. 네트워크를 사용하여 빠르게 얻지 못할 것입니다.

그러나 속도가 약 500 마이크로 초 안에 Java RMI 통화를 수행 할 수 있고 사용자 정의 코드 RPC를 사용하여 약 24 초 동안 루프백을 통해 통화를 할 수 있습니다. 동일한 JVM의 스레드간에 데이터를 전달하더라도 8 마이크로 초가 소요될 수 있습니다.

네트워크 통화를 할 수있는 시간을 결정해야합니다. 또한 통화를 시작할 시간이 중요한지 또는 결과를 반환 할 시간을 결정해야합니다. (후자는 종종 오버 헤드의 두 배가 있습니다)

참고 : 나는 milli-seconds가 아닌 마이크로 초에 대해 이야기하고 있습니다. 귀하의 목적을 위해 여러 밀리 초를 취하는 옵션을 무시합니다.

이 벤치 마크 약 2 살이지만 RMI보다 더 빠른 인기있는 Java 리모 팅 솔루션이 헤시안 2(아직도 베타에 있습니다).

그러나 메시지가 단일 자릿수 바이트 만있는 경우, 특히 프로세스가 동일한 컴퓨터에있는 경우 리모콘 솔루션을 사용하는 것이 과잉처럼 보입니다. 가능하면 단일 프로세스로 통합하는 것이 좋습니다. 사용 만 고려할 수도 있습니다 평범한 오래된 자바 소켓.

동일한 물리적 기계의 RMI/JGroup이 느리다고 생각하는 것이 멍청한가요?

컴퓨터가 괜찮은 경우 아마도 예 :) CPU 등을 섭취하는 수많은 프로세스가있는 기계에서 실행중인 경우 상황이 다를 수 있습니다. 언제나처럼 나와 같은 경험이 있는지 알아내는 가장 좋은 방법은 테스트하는 것입니다.

다음은 RMI를 사용하여 문자열 "123"을 보내기 위해 동일한 JVM에서 Nanotime을 사용하여 촬영 한 밀리 초의 시간입니다. "123ABC"를 얻기 위해 "ABC"와 함께 서버에서 서버에서 동의합니다.

콜드 JVM : 약 0.25 밀리 초의 대기 시간

0.250344
0.262695
0.241540
0.282461
0.301057
0.307938
0.282102

따뜻한 JVM : 약 0.07 밀리 초 대기 시간.

0.87916
0.72474
0.73399
0.64692
0.62488
0.59958
0.59814
0.66389

따라서 RMI 서버와 클라이언트가 로컬로 실행중인 경우 1 밀리 초 이내에 있습니다.

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