2015-01-03 2 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 не дает никаких гарантий относительно сопоставления вызовов удаленных объектов в потоки».

Оккультный смысл этого заключается в том, что вы не можете считать сервер однопоточным.

Другими словами, что происходит при разрешении сказать серверный поток, когда есть два (или более) запроса для выполнения того же метода в этом потоке?

Невозможно выполнить два или более запросов для выполнения метода в том же потоке. Вопрос не имеет смысла. Вы поместили уникальный «let say server thread», который фактически не существует.

Однако может быть два или более запросов на выполнение метода, возникающих из двух или более одновременных клиентов, или двух или более одновременных потоков в одном клиенте или обоих, и из-за формулировки спецификации RMI вы можете " t возьмем на сервере однопоточную деспфинговую модель.

В реализации Oracle/Sun это действительно многопоточность, а также реализация IBM. Я не знаю о какой-либо реализации RMI, которая не является многопоточной, и любая такая реализация будет в основном бесполезной.

+0

Благодарим вас за хорошее объяснение. – PetarMI

Смежные вопросы