문제

MarshalbyRef 객체를 사용하여 서버 측에서 스레드가 어떻게 처리되는지 알고 싶습니다.

원격 마샬비 레프 수업을 감안할 때 :

public class MyRemotedClass : MarshalByRef
{
  public int MyInt;
  public string MyString;
}

클라이언트 코드 (단일 스레드) :

MyRemotedClass m = GetSomehowMyRemotedClass(); 
m.MyInt = 5; // Write operation 1
m.MyString = "Hello World"; // Write operation 2

서버 측에는 두 개의 쓰기 작업이 있습니다. 스레드가 Threadpool에서 나온다고 가정합니다. 그러나 클래스는 MarshalbyRef이므로 두 옵션 모두 별도의 원격 절차 호출입니다. 그들은 별도의 스레드에서 실행할 것입니까? 그렇다면 작동 1 마감 전에 작동 2가 실행될 수 있습니까?

추신 : Myremotedclass MarshalbyRef를 만드는 것은 나쁜 결정입니다. 그러나 나는 그것을 바꿀 수 없으므로 그것을 제안하지 마십시오.

도움이 되었습니까?

해결책

나는 이것에 대한 전문가가 아니지만 나는 정말로 예상하다 글쓰기 MyInt 클라이언트 이벤트가 MyString 펑키 한 비동기 동작이 진행되지 않는 한.

결국, 과제가 어떤 이유로 실패하면 진행하기 전에 예외를 던지는 유일한 현명한 취급 방법, IMO.

다른 팁

실제로, 내가 생각하는 한, 2 개의 속성을 설정하는 것은 비동기 적으로 발생하지 않으므로 클라이언트는 RPC 2로 시작하기 전에 첫 번째 RPC가 완료 될 때까지 기다리고 있습니다.

어쨌든 MyRemotedClass가 Singleton Server 활성화 객체로 구성되지 않은 경우 MyRemotedClass에서 수행하는 모든 RPC에 대해 서버에서 새 인스턴스가 생성됩니다. 즉, 원격 객체에 상태가 포함되어서는 안됩니다.

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