1

我有几个线程,其中包含正在处理的对象队列,而另一个线程从各种输入中读取并创建这些对象。某些对象必须由特定线程处理,而其他对象可以由任何空闲线程处理(因此不为所有对象使用一个队列的原因),但我仍然希望保持负载合理平衡。我有一个包含每个线程使用的所有 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
4

1 回答 1

2

整体看起来还不错,但我觉得这条线

ThreadQueues(j + i) = ThreadQueues(j)

应该

ThreadQueues(j + 1) = ThreadQueues(j)
于 2013-01-17T06:06:09.953 回答