54 lines
2.3 KiB
Markdown
54 lines
2.3 KiB
Markdown
### Архитектура выполнения
|
||
```txt
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ TestRunner │
|
||
│ Создаёт N workers (по умолчанию 4) │
|
||
└──────┬──────────┬──────────┬──────────┬─────────────────────┘
|
||
│ │ │ │
|
||
▼ ▼ ▼ ▼
|
||
Worker 1 Worker 2 Worker 3 Worker 4
|
||
│ │ │ │
|
||
│ │ │ │
|
||
┌───▼──────────▼──────────▼──────────▼───┐
|
||
│ Общий пул из 1000 файлов │
|
||
│ file_0.dat, file_1.dat, ... file_999 │
|
||
└─────────────────────────────────────────┘
|
||
```
|
||
|
||
Каждый worker работает в бесконечном цикле:
|
||
|
||
``` go
|
||
for {
|
||
1. Выбрать операцию на основе весов
|
||
(30% write, 30% read, 40% stat)
|
||
|
||
2. Выбрать случайный файл из пула
|
||
|
||
3. Выполнить операцию
|
||
|
||
4. Записать метрики
|
||
|
||
5. Повторить
|
||
}
|
||
```
|
||
|
||
#### Ключевые моменты
|
||
1. Независимость workers
|
||
|
||
* Каждый worker работает сам по себе
|
||
* Никакой синхронизации между ними
|
||
* Могут одновременно работать с одним файлом
|
||
|
||
2. Случайность выбора
|
||
|
||
* Файл выбирается случайно из всего пула
|
||
* Один файл может быть выбран несколько раз
|
||
* Другой файл может не быть выбран вообще
|
||
|
||
3. Размеры динамические
|
||
|
||
* Write каждый раз выбирает новый размер
|
||
* Read читает текущий размер файла
|
||
* Stat - метаданные
|
||
|