Daniel
проблемы возникают толдько у нескольких писателей
Daniel
и то только на этапе закрытия канала
Anthony
Например, когда ты демультиплексируешь, то тут всё просто. Как правило, изначальный источник один, ты последовательно читаешь из него, отправляешь всё в канал, и когда источник закончился, канал закрываешь. На следующей стадии ты хочешь процессить данные из канала в несколько воркеров.
Daniel
ну
Anthony
Именно, ты же заранее не знаешь, какая именно горутина прочитает последние данные из канала
Kirill
и не нужно
Daniel
вообще-то нужно, чтобы канал закрыть
Anthony
а на последующих стадиях ты просто читаешь данные из канала for item := range ch { ... }
Anthony
но вот проблема, чтобы это сработало, кто-то должен канал закрыть
Kirill
вообще-то нужно, чтобы канал закрыть
почему я и без этого живу? О.о
Anthony
блин, кто-нибудь на вопрос мне может ответить?
Anthony
а не письками мериться?
cntmprrart
почему я и без этого живу? О.о
Потому что не видешь, что память течёт?
Мерль
вообще-то нужно, чтобы канал закрыть
Эмм Добавить ещё один канал для синхронизации Закрываем его - все обработчики гасятся Закрываем канал
Kirill
Потому что не видешь, что память течёт?
нет. вижу. я и без этого как-то закрываю.
🏳️ Phil
читай из канала одним обработчиком и запускай из него горутины. разницы никакой
Dmitry
блин, кто-нибудь на вопрос мне может ответить?
Я правильно понял, что писатель в канал один, а читателей(горутин, разбирающих данные из канала) много? Тогда в каждом читателе достаточно использовать for v := range myChannel { ... } как только канал закроется - цикл прекратится
Daniel
Несколько читателей - не проблема
Daniel
Несколько писателей - вот засада
Anthony
простой пример, типа unix pipe'а: source | processor1 | processor2 | destination
Anthony
именно
Anthony
несколько писателей
Daniel
Повторное закрытие канала тоже вызывает панику, вы помните, да?
🏳️ Phil
В древние времена еще счетчик обработчиков делали. когда он обнуляется - диспетчер все закрывает
Daniel
Вот да
Daniel
WaitGroup
Мерль
Например канал с пустыми структурами
Anthony
это поможет, когда ты хочешь в обработчиках (которых несколько) получать сигнал "сдохни, мы сваливаем". А когда наоборот? когда штука, которая порождает горутины, должна получить от них сигнал, чтобы закрыть канал, из которого будут читать другие процессоры пайпа?
Anthony
ибо если канал не закрыть, range ch будет ждать вечно
Dmitry
несколько писателей
Да, тогда нужно использовать какой-то метод синхронизации, типа sync.WaitGroup наверное. Т.е. закрывать канал только тогда, когда все писатели закончили
Slava
Помогите с неймингом друзья
Slava
допустим есть некий пакет, который что-то делает для других пакетов ну к примеру, генерирует флаги по структуре для flag, pflag, urfave/cli как можно называть эти подпакеты с генераторами? gen/flag gen/pflag, плохи тем, что они совпадают с оригинальными при импорте. ВНИМАНИЕ, нужно не имя для пакета, а шаблон имени для подпакетов генераторов
Daniel
да тоже самое. отдельный канал, счетчик писателей
Не надо делать WaitGroup на каналах. Он и на атомиках неплох
Мерль
adapter_*
Slava
слишком длинно
Slava
и андерскоры ужасные
Slava
зачем они вообще?
🏳️ Phil
Не надо делать WaitGroup на каналах. Он и на атомиках неплох
ну тут я пас. я про "закат солнца вручную" ))
Мерль
*gen
Dmitry
А почему бы не просто gen* (слитно, например gencli, genpflag)?
Slava
возможно, но выглядит как-то не по человечески
Dmitry
Согласен, но мне что-то кажется что тут лучше и не придумаешь, если хочется сохранить смысловую связь с пакетом, для которого происходит генерация
Мерль
Либо длинно, либо по-человечески
Slava
можно например префикс или суфикс как название пакета использовать
Slava
типа github.com/herak/herak/flag_herak
Мерль
Мерль
[last news] Advanced Encoding and Decoding Techniques in Go
MF
Всем привет! Ребят, кто какие инструменты использует для хранения данных? Желательно с быстрым доступом к данным для чтения и обновления
Slava
я файловую систему использую
Kirill
Всем привет! Ребят, кто какие инструменты использует для хранения данных? Желательно с быстрым доступом к данным для чтения и обновления
привет. наверное, ты не слышал. есть такая штука, как база данных. это такая магическая штука, которая позволяет работать с данными по определенному протоколу, и сама делает сложную работу по хранению данных. попробуй, посмотри их.
MF
BoltDB, ql, если мы о встроенных решениях
Обратил сразу внимание на BoltDB, пойду почитаю. Спасибо!
Мерль
Аааа
Kirill
Спасибо за ответ сквозь зубы. Не планирую меряться опытом
это был троллинг. по твоему вопросу качественно ответить не выйдет. что за данные — неизвестно. нужно ли атомарно обновлять — тоже. и так куча вопросов.
Ruslans
Kirill
когда данные потерять нужно
Мерль
ты хотел сказать не нужен
Почему? Абстракция я над бд - имхо штука хорошая
Ruslans
Почему? Абстракция я над бд - имхо штука хорошая
я просто шучу) но орм типа хибернейта зло
Ruslans
когда данные потерять нужно
постгрес с выключенным фсинком так и называется: режим монгодб :D
Slava
а в постгресе фсинк на каждую транзакцию?
Dmitry
когда данные потерять нужно
Данные потерять - вряд ли, но в монге есть различные развесёлости https://blog.meteor.com/mongodb-queries-dont-always-return-all-matching-documents-654b6594a827#.r1yvszwwl
Slava
зато хорошая реклама для клиентов - "мы врядли потеряем ваши данные"
Dmitry
это ты где видел "вряд ли"? вряд ли — это просто у тебя выборка везунчиков.
Хе-хе, ну да, выборка. Пусть будет так. Конструктивные доводы в этом вопросе есть?
Kirill
есть еще лучше