Ejemplo n.º 1
0
        private void Balance()
        {
            BalancedThread[] array = this.balancedThreadList;
            if (array == null)
            {
                return;
            }
            Scheduler.Schedule(array[0].JobProcessor, this.threadBalancer, 500);
            ThreadLoad     threadLoad      = null;
            BalancedThread balancedThread  = null;
            BalancedThread balancedThread2 = null;

            for (int i = 0; i < array.Length; i++)
            {
                ThreadLoad mostBurden = array[i].MostBurden;
                if (mostBurden != null && array[i].TotalLoad >= 128 && (threadLoad == null || mostBurden.PreviousLoad < threadLoad.PreviousLoad))
                {
                    balancedThread = array[i];
                    threadLoad     = mostBurden;
                }
                else if (balancedThread2 == null || balancedThread2.TotalLoad > array[i].TotalLoad)
                {
                    balancedThread2 = array[i];
                }
            }
            if (balancedThread != null && balancedThread2 != null && balancedThread.TotalLoad >= balancedThread2.TotalLoad * 3)
            {
                balancedThread.Change(threadLoad, balancedThread2);
            }
        }