以下是我的情景:
编辑:我考虑使用多个线程的原因是,对于步骤#5,我希望它修改xml并写入队列,无论步骤#2和#3是否失败。我正在考虑第2步和第3步,我可以分别存档和粉碎xml,以尝试加快这个过程。
每天的消息数量(200,000到500,000)
问题:如果我对上述所有三个进程使用相同的消息,我会遇到任何问题吗?我应该复制消息,以便在我修改步骤#5(线程#3)中的消息时,我没有任何问题吗?我仍然对多线程很无知,所以我只是想通过最好的方式来处理这种情况并获得最大的吞吐量。
使用C#4.0。
谢谢,
取值
答案 0 :(得分:3)
如果消息(被视为)不可变,则可以 所以你肯定需要在第5步中复制一份。
其余的:它几乎取决于所有事情。
由于I / O通道不同,您可能会看到线程的一些优势。
另一方面,如果有很多消息进入,则每条消息1个线程上的所有5个步骤可能同样或更好。
答案 1 :(得分:1)
在编写多线程应用程序时,共享状态是最大(如果不是最大)问题之一。你可以随时做所有的锁定工作,但仍然很难保持一切正常。 如果你可以使你的消息不可变(从某种意义上说,每次改变都会创建一个新对象)你就会没事,因为它不会成为任何共享状态。 但是,您应该考虑,有时不可变对象的成本甚至比获取锁定更加昂贵,甚至更棘手。但是,在你的位置,我会给不变性机会。