每个线程一个 DAO 还是线程安全 DAO?

发布于 2024-08-17 03:21:01 字数 68 浏览 4 评论 0原文

我想知道多线程应用程序中是否有经过批准的做法。我应该为每个线程拥有一个 DAO 还是干脆将一个 DAO 设为线程安全单例。

I'm wondering if there's an approved practice in a multi-threaded app. Should I have one DAO per thread or simply make one DAO a thread safe singleton.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

橘香 2024-08-24 03:21:01

这实际上在很大程度上取决于您用于数据访问的机制。如果您具有非常可扩展的数据访问和大量线程,那么使用某种形式的线程静态数据访问可能会很有优势。

如果您没有可扩展的数据访问,您的提供程序不支持每个进程多个线程,或者您此时不需要可扩展性,那么使用具有适当同步的单例会更简单且更容易实现。

对于大多数业务风格的应用程序,我个人认为单例方法更容易维护,而且可能更好 - 如果没有其他原因,它更容易有效测试。可能不需要使用多个线程进行数据访问,因为数据访问可能不会成为影响可用性的瓶颈(如果您设计正确,并且适​​当地批处理请求)。

This really depends a lot on the mechanism you're using for data access. If you have a very scalable data access, and lots of threads, using some form of thread static data access can be advantageous.

If you don't have scalable data access, your provider doesn't support multiple threads per process, or you just don't need the scalability at that point, using a singleton with appropriate synchronization is simpler and easier to implement.

For most business style applications, I personally think the singleton approach is easier to maintain, and probably better - if for no other reason than it's much, much easier to test effectively. Having multiple threads for data access is likely not required, as the data access is probably not going to be a bottleneck that effects usability (if you design correctly, and batch requests appropriately).

神经大条 2024-08-24 03:21:01

使用最适合您的应用程序架构的方法,除非:

1) 您的数据访问对象的创建成本很高,在这种情况下您应该倾向于线程安全的单例。

2) 您的对象保持可变状态,如 Active Record 模式。 (不可变的 DAO 配置状态,如超时阈值,不计算在内。)

Use the approach that best suits your application architecture, unless:

1) Your data access objects are expensive to create, in which case you should lean toward a thread-safe singleton.

2) Your objects maintain mutable state, as in the Active Record pattern. (Immutable DAO configuration state, like timeout thresholds, doesn't count.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文