LINUX.ORG.RU

Ответ на: комментарий от hateyoufeel

Но это-ж не параллельная очередь.
Если сделать через gen_server, то все упрётся в количество мессаг в mailbox.
Или выход один, делать запить чтение через ets с флагами :
write_concurrency
read_concurrency
?

denisE ()

Не, все не то.
Попробую еще раз описать проблему.
Может быть её и нет или она как-то по-другому решается.
Есть ковбой, в нем с кажем есть :
acceptors = 100
max_connections = 1014.
Есть несколько пулов воркеров которые разбиты на задачи и пулы воркеров могут как появляться, так и исчезать.
И заранее, при старте нового пула воркеров, мы не знаем сколько в будущем(в следующую секунду или 10 мин), потребуются воркеров для конкретной задачи.
Вот получается такая штука.
Допустим на старте мы запустили 10 пулов по 100 воркеров, приходит к нам по 100 запросов на каждый воркер, всё гуд(машина не нагружена), и вдруг происходит всплеск и на 3-й пул приходит 1000 запросов, в этом раскладе они лягут в ящики процессов и пока каждый процес до них не догребёт они там будут лежать, а если у нас есть очередь, то мы можем отследить что очередь очень быстро выросла и «адекватного» количества воркеров нет, соответственно мы запускаем нужное количество воркеров и кидаем им задания.
Как-то так, сори если не получилось донести идею, если не ясно выразился, пишите, поропбую как-то по-другому.

denisE ()
Ответ на: комментарий от denisE

Во-первых, откуда необходимость использовать пулы воркеров? Эрланг спокойно переварит сотни тысяч процессов. Их можно поднимать по необходимости, выполнив задачу, они помрут. Точно пулы нужны? Ну если таки нужны, то нужен модуль, который будет распределять задачи по пулам. Возможно, у тебя такой уже есть. Он должен хранить текущее кол-во пулов и воркеров в них. Если кол-во задач на такой-то тип превысит их число, то поднимет новый пул.

anonymous ()

вот честно: не надо тут придумывать пока не получишь нагрузку.

Всё что ты накодишь «для перфоманса» будет неправильным.

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

max_lapshin ★★ ()