并发访问远程对象 Java RMI
Concurrent access to a Remote Object Java RMI
我目前正在研究 Java RMI 的工作原理,但我不了解某个方面。
在非分布式多线程环境中,如果从不同线程同时调用同一对象上的方法,则每个方法都将在各自线程的堆栈上执行(访问共享数据不是我的问题的一部分)。
在分布式系统中,由于客户端进程调用存根上的方法,而实际调用是在创建远程对象的进程的堆栈上执行的,因此如何处理对方法的同时调用?换句话说,当有两个(或更多)请求在该线程上执行相同的方法时,让我们说服务器线程会发生什么?
我想到这个问题是因为我想将它与我习惯的进行比较——执行在不同的堆栈上。
how are simultaneous calls to a method handled?
未指定。 RMI specification中有详细说明:"The RMI runtime makes no guarantees with respect to mapping remote object invocations to threads."
这其中的神秘含义是您不能假设服务器是单线程的。
In other words what happens at the lets say server thread when there are two (or more) requests to execute the same method on that thread?
不能有两个或更多请求在同一个线程上执行该方法。这个问题没有意义。您设置了一个实际上并不存在的唯一 'lets say server thread'。
然而,可能有两个或多个执行方法的请求来自两个或多个并发客户端,或单个客户端中的两个或多个并发线程,或两者兼而有之,并且由于 RMI 规范的措辞,您可以假设服务器端采用单线程调度模型。
在Oracle/Sun实现中它确实是多线程的,同上IBM实现。我不知道任何不是多线程的 RMI 实现,任何这样的实现基本上都是无用的。
我目前正在研究 Java RMI 的工作原理,但我不了解某个方面。
在非分布式多线程环境中,如果从不同线程同时调用同一对象上的方法,则每个方法都将在各自线程的堆栈上执行(访问共享数据不是我的问题的一部分)。
在分布式系统中,由于客户端进程调用存根上的方法,而实际调用是在创建远程对象的进程的堆栈上执行的,因此如何处理对方法的同时调用?换句话说,当有两个(或更多)请求在该线程上执行相同的方法时,让我们说服务器线程会发生什么?
我想到这个问题是因为我想将它与我习惯的进行比较——执行在不同的堆栈上。
how are simultaneous calls to a method handled?
未指定。 RMI specification中有详细说明:"The RMI runtime makes no guarantees with respect to mapping remote object invocations to threads."
这其中的神秘含义是您不能假设服务器是单线程的。
In other words what happens at the lets say server thread when there are two (or more) requests to execute the same method on that thread?
不能有两个或更多请求在同一个线程上执行该方法。这个问题没有意义。您设置了一个实际上并不存在的唯一 'lets say server thread'。
然而,可能有两个或多个执行方法的请求来自两个或多个并发客户端,或单个客户端中的两个或多个并发线程,或两者兼而有之,并且由于 RMI 规范的措辞,您可以假设服务器端采用单线程调度模型。
在Oracle/Sun实现中它确实是多线程的,同上IBM实现。我不知道任何不是多线程的 RMI 实现,任何这样的实现基本上都是无用的。