【问题标题】:Design Patterns for Multithreading [closed]多线程的设计模式
【发布时间】:2013-06-20 05:50:16
【问题描述】:

当大型项目由于共享突变而崩溃时,多任务处理似乎是一场灾难,我想说共享资源由多个线程访问。调试和跟踪错误的来源以及导致错误的原因变得非常困难。这让我问,有没有设计模式可以在设计multithreaded 程序时使用?

非常感谢您对此的看法和 cmet,如果有人可以提出可以遵循以使我们的程序线程安全的良好设计实践,那将是一个很大的帮助。

【问题讨论】:

    标签: multithreading design-patterns multitasking design-principles


    【解决方案1】:

    @WYSIWYG 链接似乎有很多有用的模式,但我可以给你一些指导方针。多线程程序问题的主要来源是更新操作或并发修改,一些较少发生的问题是饥饿、死锁等,如果我可以说这些问题更致命,所以要避免这些情况,您可以:

    • 利用Immutable Object 模式,如果一个对象在创建后不能被修改,那么你就不能有不协调的更新,而且我们知道在你的情况下,JVM 保证创建操作本身是原子的。
    • Command Query Segregation Principle:这是修改对象和读取对象的代码的单独代码,因为读取可以同时发生,但修改不能。
    • 充分利用您正在使用的语言和库功能,例如并发列表和线程结构,因为它们设计精良且性能良好。
    • 有一本书(虽然很旧),但设计非常好 这样的系统,它被称为Concurrent Programming in Java

    【讨论】:

    • 谢谢@Sniffer。这确实有助于设计多线程应用程序。
    • 我开始读这本书,非常好,写得很好:amazon.com/Design-Multithreaded-Software-Entity-Life-Modeling/…
    • Command-Query - 我们不能说读取是安全的并且不需要任何锁。我们可以使用读写锁,“查询”会使用读锁,但我们无法避免锁。
    【解决方案2】:

    设计模式用于解决特定问题。如果你想避免死锁并增加调试,有一些注意事项

    1. 用户线程安全库。 .Net java、C++ 有自己的线程安全库。使用它们。不要尝试创建自己的数据结构。

    2. 如果您使用的是 .Net,请尝试使用 Task 而不是线程。它们更符合逻辑和安全。

    您可能想查看一些与并发相关的模式列表

    http://www.cs.wustl.edu/~schmidt/patterns-ace.html

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多