2015-01-03 3 views
0

현재, Java RMI의 동작 방법을 연구 중입니다 만, 특정 측면을 이해할 수 없습니다.
비 분산 다중 스레드 환경에서 동일한 객체의 메소드가 다른 스레드에서 동시에 호출되는 경우 각 스레드는 해당 스레드의 스택에서 실행됩니다 (공유 데이터 액세스는 제 질문의 일부가 아닙니다).
분산 시스템에서 클라이언트 프로세스가 스텁의 메소드를 호출하고 실제 호출이 원격 객체를 생성 한 프로세스의 스택에서 실행되기 때문에 메소드에 대한 동시 호출이 어떻게 처리됩니까? 즉, 스레드에서 동일한 메소드를 실행하는 두 가지 (또는 그 이상) 요청이있을 때 서버 스레드가 어떻게됩니까?
이 질문은 제가 이것을 익숙한 것과 비교하고 싶습니다. 즉, 다른 스택에있는 실행을 비교하는 것입니다.원격 객체에의 동시 액세스 Java RMI

+0

RMI 서버는 들어오는 "호출"을 처리하기 위해 스레드 풀을 사용합니다. 이 튜토리얼에 따르면 http://www.comp.lancs.ac.uk/~weerasin/csc253/tutorials/week7.html에는 클라이언트 프로세스의 스레드와 서버의 스레드 (즉, 같은 스레드의 요청 클라이언트 스레드는 다른 서버 스레드에서 실행될 수 있으며, 동일한 클라이언트 프로세스의 다른 스레드로부터의 요청은 동일한 서버 스레드에서 실행될 수 있습니다.) 서로 다른 클라이언트 프로세스의 요청은 항상 다른 서버 스레드에서 실행됩니다. –

+0

@jameslarge Sun/Oracle 구현에 스레드 풀이 없습니다. 인용 한 링크는 규범 적 참조가 아닙니다. – EJP

답변

1

동시 호출로 처리되는 방법은 무엇입니까?

지정되지 않습니다. RMI specification에서 "RMI 런타임은 원격 객체 호출을 스레드에 매핑하는 것과 관련하여 보증하지 않습니다."

오컬트의 의미는 서버가 단일 스레드라고 가정 할 수 없다는 것입니다.

다른 말로하면 스레드에서 동일한 메소드를 실행하는 두 가지 (또는 그 이상) 요청이있을 때 서버 스레드가 어떻게됩니까?

동일한 스레드에서 메서드를 실행하는 요청이 두 개 이상있을 수 없습니다. 질문은 의미가 없습니다. 실제로 존재하지 않는 고유 한 '말할 수있는 서버 스레드'를 가정했습니다.

두 개 이상의 동시 클라이언트 또는 두 개 이상의 동시 스레드가 단일 클라이언트에 있거나 둘 다에서 발생하는 메서드를 실행하는 요청이 둘 이상있을 수 있으며 RMI 사양의 문구 때문에 ' 서버에서 단일 스레드 파견 모델을 가정합니다.

오라클/썬 구현에서는 IBM 구현과 달리 실제로는 멀티 스레드입니다. 나는 멀티 쓰레드가 아닌 RMI 구현에 대해 알지 못한다. 그런 구현은 기본적으로 쓸모가 없다.

+0

좋은 설명에 감사드립니다. – PetarMI