专家或通才线程

时间:2009-10-26 10:51:08

标签: multithreading

专家或通才线程。

嗨,我正在开发一个对象经过一些步骤的系统。

第一。主要是数据库查询

第二。主要是高清I / O和xml解析

第三。主要是Webservice通信

第四。主要是Xml序列化和反序列化

第五。一些可选的工作

系统需要每小时处理数千个对象,所以我将使用大量的线程,但我的问题是,最好的方法是什么?

  • 每个步骤的一些专家线程:每个步骤上有5个线程,一些线程在第一步获取对象,处理它们,更新这些对象的状态,因此第二步的另一个专家线程获取这些对象和就此工作。

  • 所有通才线程,每个线程从第一步获得一些对象,直到第5步结束。

3 个答案:

答案 0 :(得分:2)

需要考虑的一些事项

  • 失败模式:步骤失败会怎样?执行的工作必须重试或丢弃?是否存在线程死亡并重新创建或线程永远存在的故障模式?如果必须重新开始工作,那么专家线程会更有意义,因为当失败时,对象会被读入队列。

  • 协调:在专家线程中,如果步骤严格连续,对象通常会在共享结构中存活更长时间,可能会损害您的吞吐量。因此,如果所有步骤都是严格连续的,那么通用线程就更容易减少协调工作。

答案 1 :(得分:1)

巧合的是,我们前一段时间有过类似的讨论。我们提出了在做出决定之前应该关注的这些要点:

  1. 平均一步需要多长时间? - >如果每个步骤花费最少的时间,那么通常最好让一个线程执行所有步骤或上下文切换成为开销
  2. 每个步骤都是高度特定领域的吗? - >如果是这样,那么最好将它们保存在单独的线程中。虽然人们可能会争辩说仅仅分离执行代码就足够了,但我认为并非总是如此。对于例如特定的线程可能需要一些特殊的priovele或更高的优先级。
  3. 上下文切换成本? - >无需解释
  4. 线程模型和资源 - >对于例如您的系统用完了线程,并且优先级更高的请求已经到来。你会留下低级优先权来满足这个要求吗?
  5. 我记得还会在评论中添加更多内容!!

答案 2 :(得分:1)

我可以想象您可能希望限制同时进行数据库和WS调用的数量,这样您就可以在管道的不同阶段获得不同程度的同意。因此,我可能会考虑使用专家。这往往会增加解决方案的整体复杂性。所以我首先要从通用方法的构建和性能测试开始。如果你得到了你想要的吞吐量,那就保持简单,不管多好。