我想知道是否有一個多線程應用程序批准的做法。我應該每個線程都有一個DAO,或者只需將一個DAO作爲一個線程安全的單例。每個線程或線程安全DAO有一個DAO?
5
A
回答
4
這真的取決於你使用的數據訪問機制很多。如果你有一個非常可伸縮的數據訪問和大量的線程,使用某種形式的線程靜態數據訪問可能是有利的。
如果您沒有可擴展的數據訪問權限,您的提供程序不支持每個進程的多個線程,或者您不需要此時的可伸縮性,那麼使用具有適當同步的單例更簡單,更易於實現。
對於大多數商務風格的應用程序,我個人認爲單的做法是更容易維護,可能會更好 - 如果沒有其他原因,而不是它是非常非常容易有效地進行測試。擁有多個數據訪問線程可能不是必需的,因爲數據訪問可能不會成爲影響可用性的瓶頸(如果設計正確,並且批量請求適當)。
0
使用最適合你的應用程序架構,辦法,除非:
1)數據訪問對象是昂貴的創建,在這種情況下,你應該向着一個線程安全的單瘦。
2)你的對象保持可變的狀態,如Active Record pattern。 (不可變的DAO配置狀態,如超時閾值,不計。)
相關問題
- 1. DAO模式多線程
- 2. 從另一個DAO調用一個DAO?
- 3. bitset個別位線程安全爲每個線程寫入在一次?
- 4. 每個數據庫連接一個DAO?
- 5. 從兩個線程使用相同的服務和DAO
- 6. 多個DAO jdbctemplate構造函數注入多線程風險?
- 7. 使用線程安全或非線程安全的PHP?
- 8. 每個線程一個SQLiteConnection?
- 9. 做一個LinkedRingBuffer線程安全
- 10. 如何以線程安全的方式緩存DAO中的信息
- 11. 線程安全
- 12. 線程安全
- 13. 線程安全
- 14. 線程安全
- 15. 線程安全
- 16. 線程安全
- 17. 線程安全
- 18. 每個具有相同結構的多個表的一個DAO
- 19. 一個線程讀取和另一個寫入volatile變量 - 線程安全?
- 20. msgsnd()線程和/或進程安全嗎?
- 21. 如何創建多個線程池(即多個執行程序,每個線程池都有一個線程)
- 22. @Inject多個DAO
- 23. 線程安全應用程序中的線程安全
- 24. C#線程 - 一個線程數組,其中每個線程包含一個帶有圖像的表單
- 25. RedisClusterClient,每個線程一個連接或一個連接
- 26. Java,多個線程,每次只執行一個線程
- 27. 安全Perl線程
- 28. unordered_map線程安全
- 29. WriteFile線程安全
- 30. CFAttributedString線程安全
吾道的,實際上是連接到兩個來源:通過RPC的SimpleDB和PHP API。我的猜測是我應該使用DAO每線程約100個線程來避免瓶頸問題。在這種情況下你有沒有看到任何明顯的原因? – pondermatic 2010-01-05 00:12:18
可能更好地使DAO成爲單例,並且在內部只是異步工作。然後可以根據需要使用ThreadPool進行擴展......這對於PHP API尤其如此,因爲Web請求非常異步地工作,並且大多數Web框架對此有很好的支持...... – 2010-01-05 00:41:59