Esempio n. 1
0
        /// <summary>
        /// Выбирает регион с максимальным весом очереди
        /// </summary>
        /// <param name="j">номер главного региона</param>
        /// <returns>регион с максимальным весом</returns>
        RBN MaxWeightRegion(int j)
        {
            ArrayList NotSleepRegions = new ArrayList(RegionsCount);

            for (int i = 0; i < RegionsCount; i++)
            {
                RBN rbn = (RBN)Regions[i];
                if (!rbn.IsSleep())
                {
                    NotSleepRegions.Add(rbn);
                }
            }
            if (NotSleepRegions.Count > 0)
            {
                RBN maxWeight = (RBN)NotSleepRegions[0];
                for (int i = 1; i < NotSleepRegions.Count; i++)
                {
                    RBN rbn = (RBN)NotSleepRegions[i];
                    if (maxWeight.Weight_Compute(WeightComputeMode) <
                        rbn.Weight_Compute(WeightComputeMode))
                    {
                        maxWeight = rbn;
                    }
                }
                return(maxWeight);
            }
            else
            {
                return(null);
            }
        }
Esempio n. 2
0
 /// <summary>
 /// Функция реализует работу без балансировщика
 /// </summary>
 void NotBalancedHandler()
 {
     for (int i = 0; i < RegionsCount; i++)
     {
         RBN rbn = (RBN)Regions[i];
         rbn.Work(time);
         if (ThrottleCount == Throttle)
         {
             if (RIA != null)
             {
                 RIA(rbn.Region_num, !rbn.IsSleep());
             }
             if (QS != null)
             {
                 QS(rbn.Region_num, rbn.GetQueueCount());
             }
             if (QCS != null)
             {
                 QCS(rbn.Region_num, rbn.TOTAL_QUERY_COUNT);
             }
             if (QWS != null)
             {
                 QWS(rbn.Region_num, rbn.Weight_Compute());
             }
             if (GR != null)
             {
                 GR(GeneralRNBnum);
             }
         }
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Функция вычисляет среднее значение весов регионов
        /// </summary>
        /// <returns>среднее значение весов регионов </returns>
        float compute_mean_weigth()
        {
            float s = 0;

            for (int i = 0; i < RegionsCount; i++)
            {
                RBN rbn = (RBN)Regions[i];
                s += rbn.Weight_Compute(WeightComputeMode);
            }
            return(s / RegionsCount);
        }
Esempio n. 4
0
 /// <summary>
 /// Функция вычисляет отклонение веса региона от среднего веса
 /// </summary>
 /// <param name="mean">среднее значение весов регионов</param>
 /// <returns>массив целых чисел для каждого региона:
 /// 0 - "-" девиация 1 - "+" девиация</returns>
 int[] deviation_average_weight(float mean)
 {
     int[] deviation = new int[RegionsCount];
     for (int i = 0; i < RegionsCount; i++)
     {
         RBN rbn = (RBN)Regions[i];
         if (rbn.Weight_Compute(WeightComputeMode) > mean)
         {
             deviation[i] = 1;
         }
         else
         {
             deviation[i] = 0;
         }
     }
     return(deviation);
 }