/// <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); } }
/// <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); } } } }
/// <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); }
/// <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); }