Многопоточность через баристи / синхронизация - PullRequest
0 голосов
/ 21 ноября 2018

Теоретическая конструкция:

У меня очень большой зал, где работает около 64 баристи (Threads).

За один раз приходит около 1000 клиентов, чтобы получить кофе.

Клиенты - немцы, поэтому они стоят в 64 цепях перед 64 баристи.

У каждого баристи в очереди будет около 15-16 клиентов.

Баристи очень быстрые,самый быстрый - около 10 мс, самый медленный - максимум 50 мс.

Каждый бариста работает по принципу «первым пришел-первым вышел».

Я моделирую это в Программе и ееЮнит-тест.

public class MassiveWorkTest {

    private int timeFac = 10;
    private int worksFinished = 0;
    private boolean endCalled = false;

    public void testBarista() {
        byte baristi = (byte) 64;
        BaristiQueuePool b = new BaristiQueuePool(baristi, "TestBarista", new Runnable() {

            @Override
            public void run() {
                endCalled = true;
            }
        });
        Random r = new SecureRandom();
        long theoreticalWorkTime = 0;
        for (int i = 0; i < 10000; i++) {
            final int time = 10+r.nextInt(40);
            theoreticalWorkTime += time;
            b.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.currentThread().sleep(time);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
        theoreticalWorkTime /= baristi;

        long theoreticalOverallTime = theoreticalWorkTime + theoreticalWorkTime / 5;
        assert b.awaitTermination((int) theoreticalOverallTime, TimeUnit.MILLISECONDS);
        assert endCalled;
        assert worksFinished == 0;
    }
}

Мой компьютер работает довольно быстро, но другие могут этого не делать.Я увеличиваю время ожидания на 20%.

Иногда 20% недостаточно, и тест не пройден.Это плохо, потому что кто-то не может строить.

Как рассчитать идеальное нерабочее время баристи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...