Являются ли классы сервисов Google App Engine (Java) поточно-ориентированными? - PullRequest
5 голосов
/ 26 февраля 2011

Можно ли один раз получить ссылку на сервис с завода и использовать его для обработки нескольких запросов? Лучше всего это объяснить с помощью следующего псевдокода для сервлета:

SomeServlet...{
  MemcacheService memcacheService = MemcacheServiceFactory.getMemcacheService();
  UserService userService = UserServiceFactory.getUserService();
  DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService();

  doGet(...){
    userService.doSomething(...);
  }
...
}

Это может быть преждевременная оптимизация, но мне просто интересно узнать, какова стоимость получения услуги для каждого запроса. Пожалуйста, поделитесь своим пониманием.

Ответы [ 2 ]

7 голосов
/ 26 февраля 2011

В ветке группы Google http://groups.google.com/group/google-appengine-java/browse_thread/thread/d3f1536084f59c22, Икай Лан (из команды GAE в Google) говорит, что MemcacheService поточно-ориентирован, но это кэширование бесполезно, потому что каждый раз вы получаете только один объект. сервис с завода.

Поскольку все службы получены одинаковым образом, я думаю, мы могли бы предположить, что все они имеют одинаковую конструкцию и все они ориентированы на многопотоковое исполнение. Но поскольку получение каждого экземпляра при каждом запросе не является дорогостоящим, я бы не стал их кэшировать.

0 голосов
/ 03 января 2017

В ветке группы Google https://groups.google.com/forum/#!topic/google-appengine-java/4Zt5IEKy_5s Джон Паттерсон отмечает, что служба DatastoreService очень легкая, поэтому лучше всего получить ее с завода и настроить в нужном вам месте.

Также в том же потоке Джефф Шнитцер указывает, что, поскольку DatastoreService не помечен как поточно-безопасный, было бы неразумно предполагать, что оно есть (или всегда будет).

Однако некоторые методы, такие как getCurrentTransaction (), задокументированы как поддерживающие потоки (https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/BaseDatastoreService),), поэтому в некоторых ситуациях DatastoreService может быть терпимым к потоку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...