2.3.4.
Вариант 2 модели - время обработки версий записи клиентом
зависит от числа обновлений, выполненных ранее другими
клиентами
Этот вариант модели разработан в [89, 99]. Модель отличается от
предыдущей (см. пункт 2.3.2) тем, что в массив обработки добавляется столбец
72
(U
1
…U
n
), который содержит количество обновлений записи другими источниками
(клиентами), выполненных между последовательными обновлениями записи
данным клиентом. Время обработки рассчитывается не как сумма по W, а как
сумма по (U
i
+1). В таблице 2.5 приводится описание алгоритма работы модели.
Таблица 2.5 – Алгоритм модели по варианту 2.
№
Пункт алгоритма
Примечание
1 Положить W = 1, массив обработки пуст
Новая запись включена в БД.
2 j-ое требование поступает на обработку
Наступил момент времени τ
j
3 Сохранить текущее число версий записи
в j-ой строке массива: Q
j
= W,
определить φ, положить U
i
=0, задержать
требование на время φ (обработать
обновления записи).
j-й клиент читает W версий записей,
φ
=
1
1
j
U
, ξ - случайное время обработки
клиентом одного обновления записи, U
i
- число
обновлений, выполненных другими клиентами.
4 Если j-ое требование поступает на
обработку, то перейти к пункту 3
алгоритма.
Наступило очередное время τ
j
5 Если
требование покидает массив
обработки (пусть это будет j-я строка
массива), то выполнить следующие
действия:
а) W = W - Q
j
+ 1
б) для всех строк массива
Q
i
= Q
i
- Q
j
,
если Q
i
< 0, то положить Q
i
= 0,
если i <> j, то увеличить U
i
на 1
г)
задержать
клиента
на
время
обдумывания результатов работы с
версиями.
См. примечание в таблице 2.3.
См. примечание в таблице 2.3.
Накапливать
для
i-го
клиента
число
обновлений, выполненных другими клиентами.
6 Перейти к пункту 4 алгоритма
В таблице 2.6 представлен текст модели на языке GPSS.
Таблица 2.6 – Текст модели по варианту 2.
Метка
Блок
Комментарий
LMBD EQU 5.5
1 /
λ = 5.5
NKL EQU 30
Число клиентов = 30
INITIAL X$VER_N,1
W := 1
MAS MATRIX ,30,2
Массив обработки (2 столбца)
73
Продолжение таблицы 2.6
Метка
Блок
Комментарий
STAT_VER
TABLE X$VER_N,1.5,1,31
Создание таблицы для сбора статистики по
числу версий записи
STAT_VRVZ
TABLE X$VRVZ,10,10,45
Создание таблицы для сбора статистики по
времени обработки обновлений
GENERATE ,,,NKL
Генерация NKL транзактов (клиентов)
ASSIGN 1,XN1
k = номер транзакта (клиента)
MSAVEVALUE MAS,*1,2,0
U[k] := 0
MET1
ADVANCE (EXPONENTIAL(7,0,LMBD))
Задержать клиента на время обдумывания
MSAVEVALUE MAS,*1,1,X$VER_N
Q[k] := W
ASSIGN 2,MX$MAS(*1,2)
Число итераций := U[k]
ASSIGN 2+,1
Учесть обновление текущим клиентом
MSAVEVALUE MAS,*1,2,0
Сбросить число обновлений для текущего
клиента U[k] : = 0
SAVEVALUE VRVZ,0
Здесь будет накапливаться время обработки
версий записи
MET2
SAVEVALUE VRVZ+,FN$VRF
VRF - имя функции вычисления времени
обработки одной записи
LOOP 2,MET2
Цикл по количеству итераций
TABULATE STAT_VRVZ
Заполнить статистику по времени обработки
записей
ADVANCE X$VRVZ
Задержка клиента на время обработки записей
SAVEVALUE VER_N-,MX$MAS(*1,1)
W := W - Q[k]
SAVEVALUE VER_N+,1
W := W + 1
TABULATE STAT_VER
Заполнить статистику по количеству записей
SAVEVALUE TODEL,MX$MAS(*1,1)
Сохранить Q[k] в переменную
ASSIGN 2,NKL
Число итераций := число клиентов
MET3
MSAVEVALUE MAS-,*2,1,X$TODEL
Q[i] := Q[i] - Q[k]
TEST L MX$MAS(*2,1),0,MET4
Если Q[i] < 0, то
MSAVEVALUE MAS,*2,1,0
Q[i] := 0
MET4
TEST NE *1,*2,MET5
Если k <> i, то
MSAVEVALUE MAS+,*2,2,1
U[i] := U[i] + 1
MET5
LOOP 2,MET3
Цикл по количеству итераций
TRANSFER ,MET1
Перейти к источнику
74
Do'stlaringiz bilan baham: |