2012-03-22 68 views
3

在我們的ColdFusion應用程序中,我們有無狀態的模型對象。 我想要的所有數據都可以通過一個方法調用(它在內部調用其他方法而不保存狀態)。ColdFusion單例對象池

方法通常會詢問數據庫中的數據。所有的方法都是隻讀的,所以我不必擔心線程安全(如果我錯了,請糾正我)。

所以沒有必要實例化對象。我可以靜態地調用它們,但ColdFusion沒有靜態方法 - 調用該方法意味着首先實例化對象。

爲了提高性能,我爲每個Model對象創建了單例。 到目前爲止它效果很好 - 每個對象都創建一次,然後根據需要進行訪問。

現在我擔心所有的數據請求只會經過1個模型對象。 我應該嗎?我的意思是如果在我的對象上有一個方法getOfferData(),並且它很耗時。 如果有幾個客戶想要訪問它,該怎麼辦? 第二個請求會等待第一個請求完成還是在單獨的線程中執行?畢竟,它是同一個對象。

我應該爲此實現某種對象池嗎?

回答

6

您正在使用的單例模式不會導致您描述的問題。如果getOfferData()仍在運行時,該功能的其他呼叫會叫上一個不同的請求,那麼這將不會導致其排隊,除非你做下列操作之一: -

  1. 使用CFLOCK授予獨佔鎖
  2. 獲取排隊連接到你的,因爲鎖定/交易
  3. 你必須運行太多的東西,你利用一切可利用的ColdFusion

所以你要了解它的方式是好的可用的併發線程的數據庫。

希望有所幫助。

+0

感謝您的回答。你被懷疑清除了:) – Leonti 2012-03-22 14:26:54