Conversation
|
|
||
| public class Restaurant { | ||
| private final AtomicInteger foodServings; | ||
| private final LinkedBlockingQueue<FoodRequest> requests = new LinkedBlockingQueue<>(); |
There was a problem hiding this comment.
Что на джанный момент гарантирует справедливое распределение? Кажется, что сейчас вас защищает только равномерность рандома)
There was a problem hiding this comment.
В целом да, но еще и сам алгоритм. Поясню: если какой-то из программистов проголодался, то он гарантированно поест после того, как его соседи съедят не более одной порции, т.к. он уже будет находиться в очереди за локом ложки + его соседи получат следующие порции после него самого.
Но это конечно не отменяет того, что самый быстрый из программистов скорее всего поест больше остальных.
Для интереса сейчас попробовал поменять очередь на ConcurrentSkipListSet и PrioorityBlockingQueue, распределение не стало заметно более справедливым.
| private final int waitersCount; | ||
| private final int servingsCount; | ||
| private final ExecutorService programmersPool; | ||
| private final ExecutorService waitersPool; |
There was a problem hiding this comment.
Чисто как симуляция норм, но фактически -- может можно обойтись и без очереди официантов? Да/нет и почему?
| programmersCount, | ||
| waitersCount, | ||
| servings, | ||
| Executors.newVirtualThreadPerTaskExecutor(), |
There was a problem hiding this comment.
Гляньте пж к офлайн защите разницу по времени между виртуальными потоками и fixed thread pool
There was a problem hiding this comment.
Постарайтесь мне потом объяснить результаты, чтоб не скучно было
No description provided.