class ApplicationContext{
private final NetworkObject networkObject = new networkObject();
public ApplicationContext(){
networkObject.setHost("host");
networkObject.setParams("param");
}
public searchObjects(ObjectType objType){
networkObject.doSearch(buildQuery(objType));
}
}
class NetworkObject{
private final SearchObject searchObject = new SearchObject();
public doSearch(SearchQuery searchQuery){
searchObject.search(searchQuery); //threadsafe, takes 15(s) to return
}
}
考慮一個運行web應用程序的web服務器,該應用程序只創建一個ApplicationContext實例(單例)並使用相同的applicationInstance來調用searchObjects例如爲什麼多線程似乎不能加速我的web應用程序?
ApplicationContext appInstance =
ApplicationContextFactory.Instance(); //singleton
到網頁上每一個新的請求,說 'search.jsp的' 發出呼叫
appInstance.searchObjects(objectType);
我提出1000個請求爲「search.jsp的頁面。所有線程都使用相同的ApplicationContext實例,而searchObject.search()方法需要15秒才能返回。我的問題是當所有其他線程執行searchObject.search()函數或所有線程同時執行searchObject.search()時等待輪到他們(15秒)執行,爲什麼?
我希望我已經提出了我的問題非常清楚??
更新: 謝謝所有澄清我的疑問。這裏是我的第二個問題,當我這樣做應該遵守的性能有什麼區別:
public synchronized doSearch(SearchQuery searchQuery){
searchObject.search(searchQuery); //threadsafe, takes 15(s) to return
}
OR
public doSearch(SearchQuery searchQuery){
searchObject.search(searchQuery); //threadsafe, takes 15(s) to return
}
我相信使用功能「doSearch」沒有synchronized關鍵字,應給予更多的性能。但是,當我今天進行測試時,結果是以另一種方式出現的。當我使用同步關鍵字時,性能相似或有時更好。
任何人都可以解釋行爲。我應該如何調試這種情況。
問候,
佩裏
請看我上面的更新! – pankajt 2009-05-18 14:41:47