powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему poison pill не будет работать для bounded очередей?
22 сообщений из 47, страница 2 из 2
Почему poison pill не будет работать для bounded очередей?
    #39408897
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerВ самом простом случае 1 загребатель и 1 разгребатель
на какой очереди тут будет проблема?
Да на таком вырожденном случае и без очереди проблем нет.
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39408924
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньевquestionerне сможет... но это Вы к чему, я не понял.
К вопросу чем может помешать конечность очереди.

Но это только если разгребателей много
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39408930
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

Как впрочем и писателей. Если они успеют накидать после пилюли кучу сообщений, то очередь может встать, а значит и может встать и часть писателей.
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39408948
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньев,

То есть проблем не будет при соотношениях:

1-1
1-М
М-1

Для М-М работать на ограниченных очередях не будет.
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39408960
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

проблемы будут, например, если в очередь не смогут записаться все писатели.

Пусть у нас 1000 писателей, один читатель и очередь длиной 1000.

В силу каких-то IO задержек или по вине шедулера читатель заснул.
В это время писатели забили очередь. 999 повисли с попыткой записать что-нибудь.
Начался shutdown. 1000-й писатель повис на отпавке пилюли.
-- честные жители засыпают просыпается мафия ---
Проснулся наконец читатель. Выгреб 1000 сообщений. Очередь оказалась следка не fair и пилюля обогнала 999 других сообщений. По мере разгребания пришли в себя писатели и попытались накидали 999 пилюль. Пока зависли - в очереди 1000 сообщений из которых первая пилюля. Один писатель отвалил. Если читатель отвалит по первой пилюле то, еще один писатель отвалит. А 998 останутся ждать разгребания очереди.
Поэтому модели одной пилюли маловато, надо вводить счетчик. и т.п. и т.д.
И это еще без варианта, что в процессе shutdown писатель может накидать несколько сообщений.

Ну или неограниченную очередь или честную (что по сути почти тоже самое - ибо все одно надо хранить порядок кто за кем за пределами capacity) :)
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39408986
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньев Ну или неограниченную очередь или честную (что по сути почти тоже самое - ибо все одно надо хранить порядок кто за кем за пределами capacity) :)

Я думал над этим и думаю, что неограниченная очередь не fair.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    final ReentrantLock lock = new ReentrantLock();
    .....
    public void putFirst(E e) throws InterruptedException {
        if (e == null) throw new NullPointerException();
        Node<E> node = new Node<E>(e);
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            while (!linkFirst(node))
                notFull.await();
        } finally {
            lock.unlock();
        }
    }




В один момент времени может добавляться только один элемент, в этот момент могут прилететь 2 новые задачи(одна раньше, другая позже) и тут кто их них раньше попадёт в очередь - непонятно.
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39408993
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей АрсеньевПока зависли - в очереди 1000 сообщений из которых первая пилюля. Один писатель отвалил. Если читатель отвалит по первой пилюле то, еще один писатель отвалит. А 998 останутся ждать разгребания очереди.
Поэтому модели одной пилюли маловато, надо вводить счетчик. и т.п. и т.д.
И это еще без варианта, что в процессе shutdown писатель может накидать несколько сообщений.


Вот тут непонятно.

Что значит "отвалит"?
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39409114
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerЧто значит "отвалит"?
Уйдет на покой - т.е. сделает то, что от него требуется при shutdown.
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39409122
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей АрсеньевquestionerЧто значит "отвалит"?
Уйдет на покой - т.е. сделает то, что от него требуется при shutdown.

Ну дак а в случае если contention на вставку в очередь будет, то такая же история приключится
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39409190
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Об том и речь, что приходится считать сколько читателей, в зависимости от количества читателей и писателей делать длину очереди и пр. И все ради возможности отвалить не по таймауту.
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39409207
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньев,

так а ограниченность очереди то тут каким боком?
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39409228
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

В нее должны гарантированно поместится все пилюли и прочее что может накопиться между ними.
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39409277
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньевquestioner,

В нее должны гарантированно поместится все пилюли и прочее что может накопиться между ними.

Это будет проблемой только для М-М?

в других случаях нам же не надо ничего нового в очередь добавлять, просто потихоньку съедаем пилюли и считаем их
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39409467
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевSergunkaДостаточно опубликовать одно сообщение чтоб группа подписчиков свернула свою потребительскую деятельность.
Вы шину то с очередью не путаете? Из очереди может прочитать только один. Соответственно надо гарантировать, что прочтут все.

Читайте внимательно и не обрезайте чужие сообщения.
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39409651
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergunkaЧитайте внимательно и не обрезайте чужие сообщения.
И чем Вас не устроил ответ, что у этих подходов разные назначения?
Очередь нужна для сериализации сообщений и доставки каждого из них до одного обработчика. Для этих задач шина (публикатор-подписчик) мягко говоря не подходит.
Грубо говоря когда надо списать 100 рублей, никого не интересует, чтоб это бросились делать все клерки банка одновременно, но нужно сделать так, чтоб один свободный это сделал. Как впрочем и оповещать о пожаре через такую систему глупо - здесь нужен один матюгальник, который слушают все.
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39411147
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньевquestioner,

проблемы будут, например, если в очередь не смогут записаться все писатели.

Пусть у нас 1000 писателей, один читатель и очередь длиной 1000.

В силу каких-то IO задержек или по вине шедулера читатель заснул.
В это время писатели забили очередь. 999 повисли с попыткой записать что-нибудь.
Начался shutdown. 1000-й писатель повис на отпавке пилюли.
-- честные жители засыпают просыпается мафия ---
Проснулся наконец читатель. Выгреб 1000 сообщений. Очередь оказалась следка не fair и пилюля обогнала 999 других сообщений. По мере разгребания пришли в себя писатели и попытались накидали 999 пилюль. Пока зависли - в очереди 1000 сообщений из которых первая пилюля. Один писатель отвалил. Если читатель отвалит по первой пилюле то, еще один писатель отвалит. А 998 останутся ждать разгребания очереди.
Поэтому модели одной пилюли маловато, надо вводить счетчик. и т.п. и т.д.
И это еще без варианта, что в процессе shutdown писатель может накидать несколько сообщений.

Ну или неограниченную очередь или честную (что по сути почти тоже самое - ибо все одно надо хранить порядок кто за кем за пределами capacity) :)

Я тут залез в сорцы ThreadPoolExecutor. В очередь сообщения добавляются только через offer, что значит, что сообщение либо сразу добавится(вернётся true), либо не добавится и вернется false. То есть продюсеры висеть не будут. Или Вы про contention ожидание писали?
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39411160
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerЯ тут залез в сорцы ThreadPoolExecutor. В очередь сообщения добавляются только через offer, что значит, что сообщение либо сразу добавится(вернётся true), либо не добавится и вернется false. То есть продюсеры висеть не будут.
Какие-то у тебя сильно далеко идущие выводы. Про то что внутри executor-а есть очередь со своим поведением, про это в сырцах не написано?
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39411170
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczquestionerЯ тут залез в сорцы ThreadPoolExecutor. В очередь сообщения добавляются только через offer, что значит, что сообщение либо сразу добавится(вернётся true), либо не добавится и вернется false. То есть продюсеры висеть не будут.
Какие-то у тебя сильно далеко идущие выводы. Про то что внутри executor-а есть очередь со своим поведением, про это в сырцах не написано?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    /**
     * The queue used for holding tasks and handing off to worker
     * threads.  We do not require that workQueue.poll() returning
     * null necessarily means that workQueue.isEmpty(), so rely
     * solely on isEmpty to see if the queue is empty (which we must
     * do for example when deciding whether to transition from
     * SHUTDOWN to TIDYING).  This accommodates special-purpose
     * queues such as DelayQueues for which poll() is allowed to
     * return null even if it may later return non-null when delays
     * expire.
     */
    private final BlockingQueue<Runnable> workQueue;



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) {
        if (corePoolSize < 0 ||
            maximumPoolSize <= 0 ||
            maximumPoolSize < corePoolSize ||
            keepAliveTime < 0)
            throw new IllegalArgumentException();
        if (workQueue == null || threadFactory == null || handler == null)
            throw new NullPointerException();
        this.corePoolSize = corePoolSize;
        this.maximumPoolSize = maximumPoolSize;
        this.workQueue = workQueue;
        this.keepAliveTime = unit.toNanos(keepAliveTime);
        this.threadFactory = threadFactory;
        this.handler = handler;
    }




Вроде как ту, что передали - та и используется без каких-то оберток.
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39411189
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

И по вот этому конструктору ты понял что метод offer не блокирующий? А заглянуть, например, в ArrayBlockingQueue.offer() не догадался?
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39411192
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczquestioner,

И по вот этому конструктору ты понял что метод offer не блокирующий? А заглянуть, например, в ArrayBlockingQueue.offer() не догадался?

по этому конструктору я понял, что никаких манипуляций с очередь не делают, не оборачивают и всё такое
BlockingQueue interface:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    /**
     * Inserts the specified element into this queue if it is possible to do
     * so immediately without violating capacity restrictions, returning
     * {@code true} upon success and {@code false} if no space is currently
     * available.  When using a capacity-restricted queue, this method is
     * generally preferable to {@link #add}, which can fail to insert an
     * element only by throwing an exception.
     *
     * @param e the element to add
     * @return {@code true} if the element was added to this queue, else
     *         {@code false}
     * @throws ClassCastException if the class of the specified element
     *         prevents it from being added to this queue
     * @throws NullPointerException if the specified element is null
     * @throws IllegalArgumentException if some property of the specified
     *         element prevents it from being added to this queue
     */
    boolean offer(E e);
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39411520
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

А что Вы сказать то хотели?
...
Рейтинг: 0 / 0
Почему poison pill не будет работать для bounded очередей?
    #39411590
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

Ошибся. Каюсь.
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему poison pill не будет работать для bounded очередей?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]