An open API service indexing awesome lists of open source software.

https://github.com/inanyan/uni-async-1

Report and code for Lab #1 for university discipline 1-123-5
https://github.com/inanyan/uni-async-1

Last synced: 8 months ago
JSON representation

Report and code for Lab #1 for university discipline 1-123-5

Awesome Lists containing this project

README

          

# Звіт з виконання Лабораторної роботи №1 з дисципліни 1-123-5

**Дисципліна**: Асинхронне і багатопотокове програмування.

**Роботу виконав**: Попов Руслан Олександрович, гр. КІ-23-1.

## Умови

1. Створити колекцію із 10 мільйонів випадкових цілих значень в діапазоні від 1 до 100.
2. Виконати обробку за допомогою Stream API (кожне завдання реалізувати окремим методом для подальшого використання в бенчмарку з пункту 4):
- Знайти суму елементів у колекції.
- Знайти середнє значення елементів колекції.
- Знайти стандартне відхилення.
- Помножити на 2 кожен елемент вихідної колекції.
- Відфільтрувати елементи колекції, залишивши лише парні значення, які діляться на 3 без остачі.
3. Повторити ті самі дії за допомогою parallel stream.
4. Оцінити затрачений час на кожну задачу з пп. 2-3 за допомогою JMH ([Java Microbenchmark Harness](https://github.com/openjdk/jmh)).
- Методи бенчмарків не повинні бути void, потрібно повертати обчислені значення або іншим способом запобігти оптимізації невикористовуваних значень.
5. Навести порівняльну таблицю продуктивності Stream API та parallel stream у звіті.
6. Додати у звіт посилання на Git-репозиторій з кодом або надати код в архіві.

## Результати

### Повна інформація

| Stream Type | Method | Tests count | Time of one operation (ms) |
|:----------------|:-------------------|--------------:|---------------------------:|
| Java Stream | Average (method 1) | 20 | 42.871 |
| Java Stream | Average (method 2) | 20 | 50.833 |
| Java Stream | Filtering | 20 | 41.347 |
| Java Stream | Standard deviation | 20 | 50.098 |
| Java Stream | Sum | 20 | 39.955 |
| Java Stream | Multiply by 2 | 20 | 112.319 |
| Parallel Stream | Average (method 1) | 20 | 19.149 |
| Parallel Stream | Average (method 2) | 20 | 19.623 |
| Parallel Stream | Filtering | 20 | 8.826 |
| Parallel Stream | Standard deviation | 20 | 25.572 |
| Parallel Stream | Sum | 20 | 19.015 |
| Parallel Stream | Multiply by 2 | 20 | 71.216 |

### Групування по типу `Stream` та задачі для час виконання операції

| Stream Type | Average (method 1) | Average (method 2) | Filtering | Multiply by 2 | Standard deviation | Sum |
|:----------------|---------------------:|---------------------:|------------:|----------------:|---------------------:|-------:|
| Java Stream | 42.871 | 50.833 | 41.347 | 112.319 | 50.098 | 39.955 |
| Parallel Stream | 19.149 | 19.623 | 8.826 | 71.216 | 25.572 | 19.015 |%

### Порівняння часу виконання у різних `Stream`'ах

| Stream Type | mean | std |
|:----------------|--------:|--------:|
| Java Stream | 56.2372 | 27.848 |
| Parallel Stream | 27.2335 | 22.2121 |

### Аналіз

$$ H_0 : \mu_p = \mu_j $$
$$ H_a : \mu_p < \mu_j $$

Обчислимо двовибірковий Z-тест (з граничним значенням $\alpha = 0.05$):

$$ Z = \frac{\mu_p - \mu_j}{\sqrt{\frac{\sigma_p^2}{n_p} + \frac{\sigma_j^2}{n_j}}} = \frac{27.2335 - 56.2372}{\sqrt{\frac{22.2121^2}{120} + \frac{27.848^2}{120}}} \approx -8.91 $$

*Коментар: $\approx$ тут впринципі не має сенсу, оскільки обчислення вже мають похибку та округлення*.

Значенню $ Z = -8.91 $ відповідає дуже (дуже) маленьке значення $ p $.

$ p < \alpha $, отже, можемо, *прости господи навіщо я це роблю*, відхилити нульову гіпотезу.