[英]Are Google App Engine (java) service classes Thread-Safe?
是否可以從工廠獲得對服務的引用並將其用於處理多個請求? 最好使用以下偽代碼來解釋servlet:
SomeServlet...{
MemcacheService memcacheService = MemcacheServiceFactory.getMemcacheService();
UserService userService = UserServiceFactory.getUserService();
DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService();
doGet(...){
userService.doSomething(...);
}
...
}
這可能是一個不成熟的優化,但我只是想知道為每個請求獲得服務的成本是多少。 請分享您的見解。
在Google群組主題http://groups.google.com/group/google-appengine-java/browse_thread/thread/d3f1536084f59c22中 ,Ikai Lan(來自Google的GAE團隊)稱MemcacheService是線程安全的,但是緩存它沒有用,因為每次從工廠獲得服務時只有一個對象分配。
由於所有服務都以類似的方式獲得,我認為我們可以假設它們都遵循相同的設計並且都是線程安全的。 但是因為在每個查詢中獲取新實例並不昂貴,所以我不會緩存它們。
在google群組線程https://groups.google.com/forum/#!topic/google-appengine-java/4Zt5IEKy_5s John Patterson表示DatastoreService非常輕量級,因此最好從工廠獲取並配置它在你需要的時候。
同樣在同一個帖子中,Jeff Schnitzer指出,由於DatastoreService沒有被標記為線程安全,因此將其分配(或將始終是)是不明智的。
但是,某些方法(如getCurrentTransaction())被記錄為線程感知( https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/BaseDatastoreService ),因此可能在某些情況下,DatastoreService將是線程容忍的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.