我有几个线程,其中包含正在处理的对象队列,而另一个线程从各种输入中读取并创建这些对象。某些对象必须由特定线程处理,而其他对象可以由任何空闲线程处理(因此不为所有对象使用一个队列的原因),但我仍然希望保持负载合理平衡。我有一个包含每个线程使用的所有 ConcurrentQueues 的数组,我想根据它们的计数对它们进行排序。由于大多数情况下队列几乎都已排序,因此插入排序在这里会表现良好。
(编辑:对于那些询问的人,我正在写我自己的,因为根据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