Alexander
в реальных проектах не использовал
Alexander
но вообще вроде норм либа
Kirill
а unagi-chan по ходу дела просто очередь чистит лишь по получению след. сегмента
kake
Kirill
т.е. про быстрых ридерах памяти оказывается занято от 0 до (bound+delta)
Kirill
хотя про дельту гоню
Kirill
но суть в том, что даже при 0 доступных элементов почти вся очередь будет висеть в памяти, если читатель смотрит в конец её
Kirill
и выглядит, что оно by design
Alexander
хм.. а поподробнее?
Kirill
дак а что подробней?
Alexander
т.е. когда ты ридером реквестируешь себе слот, то это держит очередь?
Kirill
очередь - массив
Kirill
пишем в k-й элемент
Kirill
читаем из него же
Kirill
когда это k достигает размера очереди
Kirill
делаем новый сегмент
Kirill
а старый выкидываем
Kirill
ну вот пока не достигли размера, сегмент висит себе и висит
Alexander
а размер сегмента какой?
Kirill
размер сегмента == размер очереди
Kirill
т.е. 1 очередь в N элементов это бесконечный набор массивов размером в N
Alexander
так.. чего-то это не то вроде..
Kirill
в массиве data Cell a = Empty | Written a | Blocking !(MVar a)
Kirill
ну то не то
Alexander
там же сегментами, по 1024 элемента, разве нет?
Kirill
вот пример, который нормально жрёт памят - https://gist.github.com/qrilka/1f7cd7c2254b0e267de77d3c61542d43
Kirill
хотя ридер быстрей писателя
Kirill
я сейчас про https://github.com/jberryman/unagi-chan/blob/master/src/Control/Concurrent/Chan/Unagi/Bounded/Internal.hs
Kirill
там никаких 1024 не вижу, может какие-то более клёвые очереди уже куда-то завезли?
Alexander
ну я разве что не bounded смотрел
Alexander
sEGMENT_LENGTH
Alexander
ладно, давай вечером посмотрю, а то я бегаю туда сюда все свою работу нормально сделать не могу
Alexander
мне самому интересно
Alexander
хотя вот странно на unagi например katip работает (правда у нас без него), при таком поведении было бы "все плохо"
Leonid 🦇
я думал bounded - тупо кольцо
Alexander
там вроде не совсем кольцо
Alexander
так теперь мне интересно почему старые чанки не освобождаются
Kirill
ну чанк рабочий типа
Kirill
ну и с кольцом те же яйца вышлиб
Kirill
очередь пустая, а данные не собираются GC
Kirill
т.е. память не чистится
Kirill
про кольцо тоже тикет есть https://github.com/jberryman/unagi-chan/issues/20
Kirill
а в катипе вижу
import qualified Control.Concurrent.STM.TBQueue as BQ
Leonid 🦇
Они отказались от унаги вроде. Типа бенчи не показали значимости, но это не точно
Kirill
https://github.com/Soostone/katip/commit/ff5ca3b7fe1c1ccb70af8feca6c3b127b1f27fa9
Kirill
ага
Kirill
Found in my tests that TBQueue seems to be performing better in
this case than our use of unagi-chan. That, coupled with the more
widespread use of STM was enough to convince me to switch. I'm
guessing part of it is that unagi-chan is a chan, meaning it has
broadcast features that we don't need.
Alexander
https://github.com/haskell/stm/pull/2/files
Alexander
про что я говорил
Alexander
у нас катип вообще со своим handler-ом полностью
Leonid 🦇
а он у вас в файл пишет?
Kirill
т.е. криво работает и то и другое?
Leonid 🦇
с релоадом?
Kirill
вот жеж
Alexander
@lonokhov stdout
Alexander
Kirill пока - да
Alexander
@lonokhov но когда не лень будет мы может на стандартный перейдем, там просто форматов вывода не очень поуправляешь
Leonid 🦇
меня вымораживает что он целые пишет с точкой
Alexander
а это всяким внешним ресурсам типа datadog/stackdriver надо, чтобы оно хорошо интегрировалось в их поиск теги и т.п.
Leonid 🦇
типа 0.0, 1.0 вместо 0,1. чёртов scientific
Alexander
ещё мне не нравится то, как они хранят value
Alexander
я боюсь, что ЭТОТОРМОЗИТ
Kirill
@qnikst но можнож с гитхаба stm собрать?
Leonid 🦇
вот да
Leonid 🦇
а stm не в зависимостях у ghc?
Alexander
Kirill давно не продовал, мне казалось что оно вообще привязано к ghc
Alexander
но точно не помню
Alexander
вот bytestring точно менять можно, хотя оно и в зависимостях
Kirill
эммм, блин
Alexander
а ещё помни, что стек разрешает менять меньше, чем можно
Kirill
ок, посмотрим
Leonid 🦇
вроде нет
Alexander
может попрыгать через кольца горящие придётся
Leonid 🦇
не в зависимостях
Kirill
@lonokhov нет == не в зависимостях ghc?
Leonid 🦇
stm не распространяется с ghc
Евгений
ghc зависит от stm:
https://github.com/ghc/ghc/tree/master/libraries
Leonid 🦇
а чего его в доках нет?
Leonid 🦇
ну тогда беда
Leonid 🦇
вроде для стэка это танец с бубном, с nix я даже не знаю.