Beispiel #1
0
        // =========================


        /// <summary>
        /// Допустим ли переход между состояниями
        /// </summary>
        /// <param name="curState">Исходное состояние</param>
        /// <param name="newState">Новое состояние</param>
        /// <returns>Допустимость</returns>
        private bool CanChangeState(ExecutionThroughoutTrackerUpSmartDownCorrectionState curState, ExecutionThroughoutTrackerUpSmartDownCorrectionState newState)
        {
            if (curState == newState)
            {
                return(true);
            }

            switch (curState)
            {
            case ExecutionThroughoutTrackerUpSmartDownCorrectionState.InOptimalState:
                return(newState == ExecutionThroughoutTrackerUpSmartDownCorrectionState.TryIncrease || newState == ExecutionThroughoutTrackerUpSmartDownCorrectionState.TryDecrease);

            case ExecutionThroughoutTrackerUpSmartDownCorrectionState.TryIncrease:
                return(newState == ExecutionThroughoutTrackerUpSmartDownCorrectionState.Increasing || newState == ExecutionThroughoutTrackerUpSmartDownCorrectionState.TryDecrease || newState == ExecutionThroughoutTrackerUpSmartDownCorrectionState.InOptimalState);

            case ExecutionThroughoutTrackerUpSmartDownCorrectionState.Increasing:
                return(newState == ExecutionThroughoutTrackerUpSmartDownCorrectionState.InOptimalState || newState == ExecutionThroughoutTrackerUpSmartDownCorrectionState.TryIncrease || newState == ExecutionThroughoutTrackerUpSmartDownCorrectionState.TryDecrease);

            case ExecutionThroughoutTrackerUpSmartDownCorrectionState.TryDecrease:
                return(newState == ExecutionThroughoutTrackerUpSmartDownCorrectionState.Decreasing || newState == ExecutionThroughoutTrackerUpSmartDownCorrectionState.TryIncrease || newState == ExecutionThroughoutTrackerUpSmartDownCorrectionState.InOptimalState);

            case ExecutionThroughoutTrackerUpSmartDownCorrectionState.Decreasing:
                return(newState == ExecutionThroughoutTrackerUpSmartDownCorrectionState.InOptimalState || newState == ExecutionThroughoutTrackerUpSmartDownCorrectionState.TryIncrease || newState == ExecutionThroughoutTrackerUpSmartDownCorrectionState.TryDecrease);

            default:
                throw new InvalidOperationException("Unknown state: " + curState.ToString());
            }
        }
Beispiel #2
0
        /// <summary>
        /// Выполнить переход в состояние
        /// </summary>
        /// <param name="description">Описание причин перехода</param>
        /// <param name="state">Новое состояние</param>
        private void GoToState(string description, ExecutionThroughoutTrackerUpSmartDownCorrectionState state)
        {
            if (!CanChangeState(_state, state))
            {
                throw new InvalidOperationException("Invalid state change from " + _state.ToString() + " to " + state.ToString());
            }

            //Console.WriteLine(description + ". State = " + _state.ToString() + ", NewState = " + state.ToString());

            if (_state != state)
            {
                _state = state;

                _enterStateTimeStamp      = GetTimestamp();
                _enterStateThroughoutData = this.GetCurrentMeasure();
                _stateMeasureCount        = 0;

                _tryIncreaseBlinkCount         = 0;
                _tryDecreaseBlinkCount         = 0;
                _tryDecreaseInitialThreadCount = -1;
                _optimalStateAverageThroughout = -1;

                TurboContract.Assert(_isPerfMeasureThreadWork == false, conditionString: "_isPerfMeasureThreadWork == false");
            }
        }
Beispiel #3
0
        /// <summary>
        /// Конструктор ExecutionThroughoutTrackerUpSmartDownCorrection
        /// </summary>
        /// <param name="maxThreadCount">Максимальное число потоков</param>
        /// <param name="reasonableThreadCount">Базовое число потоков</param>
        public ExecutionThroughoutTrackerUpSmartDownCorrection(int maxThreadCount, int reasonableThreadCount)
        {
            TurboContract.Requires(maxThreadCount > 0, conditionString: "maxThreadCount > 0");
            TurboContract.Requires(reasonableThreadCount > 0, conditionString: "reasonableThreadCount > 0");
            TurboContract.Requires(maxThreadCount >= reasonableThreadCount, conditionString: "maxThreadCount >= reasonableThreadCount");

            _maxThreadCount        = maxThreadCount;
            _reasonableThreadCount = reasonableThreadCount;

            _executedTasks = 0;
            _lastTimeStamp = GetTimestamp();

            _data          = new ThroughoutData[EstimationDataLength];
            _nextDataIndex = 0;

            _state = ExecutionThroughoutTrackerUpSmartDownCorrectionState.InOptimalState;
            _enterStateTimeStamp      = GetTimestamp();
            _enterStateThroughoutData = new ThroughoutData();
            _stateMeasureCount        = 0;

            _tryIncreaseBlinkCount         = 0;
            _tryDecreaseBlinkCount         = 0;
            _tryDecreaseInitialThreadCount = -1;
            _optimalStateAverageThroughout = -1;

            _isPerfMeasureThreadWork = false;
        }