原子或巨大的

时间:2009-03-04 19:30:29

标签: c# .net parallel-processing

如果您打算在C#中编写一个非常并行的应用程序,那么构建非常小的东西会更好,例如

20个小班,制作40个较大的班级,共计60个班级,总计120个

或巨大的:

单独制作这60个课程(仍然考虑到可重用性)。

所以在#2中,这60个类可以包含做事而不是其他类的方法。

3 个答案:

答案 0 :(得分:5)

抽象地说,这些方法中的任何一种都不会产生影响。

具体而言,最小化可变状态将使您的应用程序更加可兼容。每次更改对象实例的状态时,都会产生线程安全问题的可能性(复杂性或错误;至少选择一个)。如果你看一下并行LINQ或强调并行性的函数式语言,你会发现类设计比避免状态变化更为重要。

班级设计是为了你的理智。松散耦合的代码使您更加清醒。不可变对象使您更加平行。根据需要合并。

答案 1 :(得分:4)

较小的部件更容易测试,更容易重构,更易于维护。

答案 2 :(得分:4)

这不是类的大小,而是重要的耦合范围。

对于并行应用程序,您应该支持不可变对象---有时称为“值对象”而不是具有大量属性的对象。如果需要应用导致新值的操作,只需创建新对象即可。

观察关注点的良好分离,并让它引导您使用自然数量的类来表示程序中的概念。我推荐SOLID原则,由ObjectMentor的Robert Martin编目和推广。 (这应该足以找到谷歌饲料!)

最后,我还建议您熟悉System.Threading和System.Collections。大多数集合本身并不是线程安全的,并且同步很难正确。因此,您最好使用广泛使用的,经过测试的,可靠的同步原语。