Skip to content

Vinichenko Daniil Solution#15

Open
VinDan228 wants to merge 4 commits intoreview1from
t/1/solution
Open

Vinichenko Daniil Solution#15
VinDan228 wants to merge 4 commits intoreview1from
t/1/solution

Conversation

@VinDan228
Copy link

@VinDan228 VinDan228 commented Oct 8, 2025

Здравствуйте, решение Виниченко Даниила, Распределенные Веб-Сервисы, группа М4175

Решение как будто бы очень простое, программа настраивется, хоть и немного хардкодно, конфиги лежат в объекте класса TaskStatic, типа неизменяемые в динамике статичные данные, там можно настроить количество обедающих, официантов, рационов и временные рамки каких-то действий.

Написал небольшие джавадоки, надеюсь понятные.

Также написал 3 вида табличных тестов, если это можно так назвать, тесты следующие:

  • Трапеза укладывается в какое-то заданное время
  • Количество съеденных рационов равно изначальному количеству
  • Все обедающие едят примерно одинаковое количество рационов
    Все тесты проходят

Только я закомментил тестовый кейс из условия задачи, с одним мильёном рационов, он достаточно долго идёт, мне лень ждать. Но хотя бы один полный прогон был, ловил лишь одну ошибка по времени (первый тест), не хватало времении таймаута теста, решилось увеличеним времени. Этому кейсу нужно сколько-то минут (очень уж много рационов)

@VinDan228 VinDan228 marked this pull request as ready for review October 8, 2025 09:44
* @throws InterruptedException
*/
private boolean takePortionWithWaiter() throws InterruptedException {
w.takeWaiter();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Расскажите пожалуйста как у вас гаранитруется, что все поедят +- одинаково? Ко всему этому вам не кажется, что можно как то сделать так, чтобы программисты ждали еду пока разговаривают?

s[i] = new Spoon(i);
}

try (ExecutorService programmersExec = Executors.newFixedThreadPool(n)) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

На офлайн защите немного пообщаемся про экзекутор сервисы. Постарайтесь овтетить (и мб даже замерить по времени) почему вы остановились именно на FixedThreadPool. Отдельно интересно послушать про виртуальные потоки

this.w = waiters;
this.ts = taskStatic;
this.stats = stats;
this.r = new Random();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

И также офлайн расскажите пж что нибудь интересное про ThreadLocalRandom

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants