【发布时间】:2014-11-19 15:03:00
【问题描述】:
我有某些对象需要执行某些任务。在所有对象上,所有任务都需要执行。我想使用多个线程说 N 个并行线程
假设我有像 A、B、C 这样的对象标识符(对象可以在 100 K 范围内;键可以是长字符串或字符串) 任务可以 T1,T2,T3,TN - (任务数量最多 20 个)
任务执行的条件—— 即使对于同一个对象,任务也可以并行执行。 但是对于同一个对象,对于一个给定的任务,它应该是串行执行的。 例如,假设我有 执行任务的对象是 A,B,A 和任务是t1,t2
所以 T1(A), T2(A) 或 T1(A) , T2(B) 是可能的,但 T1(A) 和 T1(A) 不应该被允许
我如何确保满足我的条件。我知道我必须使用某种散列。 我读过关于散列的信息,所以我的散列函数可以是 -
返回 ObjectIdentifier.getHashCode() + TaskIdentifier.getHashCode() 或其他可以是 - a^3 + b^2 (其中 a 和 b 分别是对象标识符和任务标识符的哈希) 什么是最好的策略,任何建议
我的任务不涉及任何 IO,到目前为止,我为每个任务使用一个线程。 所以我目前的设计还可以,或者我应该尝试根据处理器数量来优化它。 (有固定的线程数)
【问题讨论】:
-
感谢您的回答,您好,我的 ListOfObjects 是我从外部程序接收的一系列消息(通过阻塞集合)。在完成 n 条消息或接收条件后,我必须停止处理消息,处理该条件,然后恢复处理(继续阻塞收集循环)。我无法理解如何使用来自阻塞收集的消息来实现上述目标
标签: c# multithreading parallel-processing hashcode