首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程应用的策略

多线程应用的策略
EN

Stack Overflow用户
提问于 2009-12-01 15:27:24
回答 4查看 849关注 0票数 1

我可能继承一个有点复杂的多线程应用程序,该应用程序目前有几个带有2+k loc的文件、从任何地方访问的许多全局变量以及其他我认为很难闻的实践。

在开始使用当前模式添加新功能之前,我想看看是否可以使应用程序的基本架构更好。下面是一个简短的描述:

  • 应用程序在内存中的数据列表,listA,listB
  • App拥有数据的本地副本(用于脱机功能) dataFileA,dataFileB
  • App有线程tA1,tB1,用于更新从客户端到服务器的脏数据。
  • 线程tA2,tB2将脏数据从服务器更新到客户端
  • 线程tA3,tB3将内存列表中的脏数据更新为本地文件。

我有点纠结于什么不同的模式,策略,编程实践等,我应该研究,以便有知识作出最好的决定。

以下是我为自己创造的一些目标:

  1. 保持应用程序尽可能稳定
  2. 使泛型实习生很容易添加新功能(在每个新EditRecordX.cs中有50行样板代码)
  3. 降低复杂性

感谢任何关键字或其他提示,可以帮助我在这个项目。

EN

回答 4

Stack Overflow用户

发布于 2009-12-02 17:56:21

对于Quibblesome的优秀建议,我还可以补充说,使用不可变对象通常是降低线程问题风险的有效方法。(不可变对象,如.NET和Java中的字符串,一旦创建就不能修改。)

票数 2
EN

Stack Overflow用户

发布于 2009-12-01 15:55:06

我建议另一个目标是删除/减少全局状态,并尽可能频繁地将信息保存在堆栈中,以减少出现争用条件和奇怪线程问题的可能性。

如果您可以将tA2、tB2、tA3和tB3合并到相同的线程中来杀死几个线程,也许值得一看。如果这是不可能的,请考虑将它们放在facade (一个与在UI和正在与服务器对话的服务之间移动数据请求有关的线程)后面。因此,“面向用户”代码只需要处理一个客户端,而不是两个客户端。(我不把备份计算为客户端,因为这听起来像是单向过程)。

如果线程(UI和facade)等待对方完成它们的请求,那么这将防止“拉更新”与“推送更新”同时发生。

票数 1
EN

Stack Overflow用户

发布于 2009-12-01 16:04:11

一般来说,要进行这类更改,您需要查看Martin的重构:改进现有代码的设计 (大部分在重构网站上)和模式重构。您可能还会发现有效地使用遗产代码在支持安全更改方面很有用。这对多线程没有什么特别的帮助,除非在多线程环境中,更简单的代码更容易处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1826914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档