Знаете ли вы какие нибудь стратегии накопления сообщений для Reactor паттерна?
Суть в том, что есть очень много перманентных сокетных соединений и из них вычитываются сообщения, потенциально большие, но в большинстве случаев маленькие. За один read в буфер вычитывается только часть сообщения. После чтения потенциально долго может не приходить его остальное содержание. Лишь когда оно прийдет, то сообщение будет передано дальше для обработки.
Как экономно организовать хранение этих накапливаемых сообщений?
Наивное решение с аллокацией будет дергать собственно аллокатор. И сообщение размером с 1 МБ будет занимать 1 МБ, при том что всего мегабайта пришлось долго ждать, клиент тупил. Лучшее решение, но неидеально, так как хотелось бы достичь максимальной производительности в балансе с экономией.
Возможно второе наивное решение - заготовленые большие блоки. Плохо - блоки фиксированые, но ограниченые.
Чуть хитрее - маленькие блоки в гиганском массиве и как-то их менеджить, хранить сообщения кусками, но тут неясно делает ли кто-то так, будет ли тормозить.
Планирую все выходные читать сорцы Jetty. Естественно буду бенчмаркать и делать прототипы, но вдруг кто-то видел статьи годные.