Блокирующие VS неблокирующие списки

Блокирующие VS неблокирующие списки

30.08.2018 10:59:59 Просмотров 19 Источник

Всем привет. Изучаю Redis, наткнулся на то, что есть просто очереди/стеки через rpush/rpop lpush/lpop, а есть их блокирующие версии: brpop/brpush brpoplpush. Обьясните пожалуйста, в чём разница, где можно применить блокирующие версии, и(лично пойду помолюсь), если есть теория, которая показывает, зачем такие механизмы нужны, и как они крутятся под капотом (в моём случае капомот *nix систем)

** UPD пока что, я понял что

1.Блокирующие списки задаются на определенное время и полностью блокируют вызываемый процесс (полагаю, что это удобно будет для демонов ==> запустил процесс, редис-кли поставил такое-то время жизни, и этот процесс не может делать больше ничего кроме как ждать(защита от дурака) )

  1. Они используются, если мне нужно дождатся ответ от процесса, который может идти ну оооочень долго

НО, тогда вопрос вот такой: в книге "7 баз данных за 7 недель" приводится пример блок списка как части онлайн чата. Насколько вообще правильно в таком случае использовать этот механизм для чата?

У вопроса есть решение - Посмотреть?

Ответы - Блокирующие VS неблокирующие списки / Блокирующие VS неблокирующие списки

Является ответом!
Alexander Petrov

01.09.2018 07:40:12

Мне не до конца понятен смысл вопроса. Стандартная семантика же.

При использовании rpop, если в очереди нет данных, а нам они нужны, мы будем вынуждены применить поллинг - постоянно опрашивать.

При использовании brpop поллинг не нужен - мы автоматически получим данные, как только они появятся.

https://ru.stackoverflow.com/questions/875566/%d0%91%d0%bb%d0%be%d0%ba%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b5-vs-%d0%bd%d0%b5%d0%b1%d0%bb%d0%be%d0%ba%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b5-%d1%81%d0%bf%d0%b8%d1%81%d0%ba%d0%b8/876251#comment1422782_876251
Александр, правильно ли я вас понял, что у меня например есть демон, который слушает редис. Для ефективного использования блокировочных списков, я внутри демона буду ставить прослушку для данного листа, и в случае, если данные придут, то я их получу, обработаю что мне там нужно, и обратно сделаю операцию на прослушку листа, примерно вот так: while(true) { $currentWork=$this->brpop('list',1200); if($currentWork) { // делаю операцию} } Так на практике это должно работать?
https://ru.stackoverflow.com/questions/875566/%d0%91%d0%bb%d0%be%d0%ba%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b5-vs-%d0%bd%d0%b5%d0%b1%d0%bb%d0%be%d0%ba%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b5-%d1%81%d0%bf%d0%b8%d1%81%d0%ba%d0%b8/876251#comment1422801_876251
@AlexKhonko - ну, в общем, да. В официальной документации на странице blpop приведен пример event notification.
Закрыть X