我目前正在研究 Java RMI 的工作原理,但我不明白某些方面。
在非分布式多线程环境中,如果从不同线程同时调用同一对象上的方法,则每个方法都将在各自线程的堆栈上执行(访问共享数据不是我的问题的一部分)。
在分布式系统中,由于客户端进程调用 stub 上的方法,并且实际调用是在创建远程对象的进程的堆栈上执行的,因此如何处理对方法的同时调用?换句话说,当有两个(或更多)请求在该线程上执行相同的方法时,服务器线程会发生什么?
我想到这个问题是因为我想将其与我习惯的进行比较 - 执行在不同的堆栈上。
最佳答案
how are simultaneous calls to a method handled?
未指定。 RMI specification中详细说明了这一点。 :“RMI 运行时不保证将远程对象调用映射到线程。”
这的神秘含义是你不能假设服务器是单线程的。
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?
不能有两个或多个请求在同一线程上执行该方法。这个问题没有意义。您假设了一个实际上并不存在的独特的“假设服务器线程”。
但是,可能有两个或多个执行该方法的请求,这些请求来自两个或多个并发客户端,或者单个客户端中的两个或多个并发线程,或者两者兼而有之,并且由于 RMI 规范的措辞,您不能假设服务器采用单线程调度模型。
在 Oracle/Sun 实现中,它确实是多线程的,与 IBM 实现相同。我不知道有任何非多线程的 RMI 实现,并且任何此类实现基本上都是无用的。
关于java - 对远程对象 Java RMI 的并发访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27759566/