конвеера была через ets - вдохновлялся модулем timer. Там идея такая - есть ordered ets и туда кладутся кадры на обработку по ключу - таймштампу (ns). Т.к. она ordered - всё складывается аккурано последовательно. И есть воркер-обработчик, один на ets, который по ней просто линейно идёт через next. В такой архитектуре много плюсов -
1. У тебя столько линий обработки (етс +обработчик) - сколько и ядер, так что не тратишься на ненужные переключения, не теряешь кэш и вот это всё
2. высокая наблюдаемость системы т.к. по ets всегда можно любую инфу получить, даже внутрь заглянуть
3. обратное давление - это просто ets:size() < ?MAX
4. легко расширить архитектуру т.к. писать/читать в ets могут при необходимости и другие
Это в стейте генсервера делать лучше, меньше копирований данных будет
Обсуждают сегодня