我有几个Threads包含他们正在处理的对象队列,而另一个线程从各种输入读取并创建这些对象。某些对象必须由特定线程处理,而其他对象可以由任何自由线程处理(因此不为所有这些线程使用一个队列的原因),但我仍然希望保持负载合理平衡。我有一个数组,其中包含每个线程使用的所有ConcurrentQueues,我想根据它们的计数对它们进行排序。由于大多数时候队列几乎都会排序,所以Insertion Sort在这里表现良好。
(编辑:对于那些提问,我正在编写自己的,因为根据http://msdn.microsoft.com/en-us/library/6tf1f0bc(v=vs.100).aspx“此方法使用QuickSort算法,”我想要插入排序)
我用http://en.literateprograms.org/Insertion_sort_(Visual_Basic_.NET)给了我一个手,但我真的不相信自己。这看起来是否正确?
Dim i As Integer = 0
While (i < MaxThreads)
Dim j As Integer = i - 1
Dim v As Concurrent.BlockingCollection(Of BufferEntry) = ThreadQueues(i)
While (j > -1)
If (ThreadQueues(j).Count <= v.Count) Then Exit While
ThreadQueues(j + i) = ThreadQueues(j)
j -= 1
End While
ThreadQueues(j + 1) = v
i += 1
End While
答案 0 :(得分:2)
总的来说它看起来还不错,但我认为这一行
ThreadQueues(j + i) = ThreadQueues(j)
应该是
ThreadQueues(j + 1) = ThreadQueues(j)