nvkv
и особого смысла на спичках экономить тут нет, но мысль о том, что я аллоцирую кучу каналов и это, наверное, плохо мне приходила
Мерль
Дешёвая, да не очень
И довольно медленная, надо сказать
nvkv
это да, но не на тех объёмах
nvkv
у меня тут очень простое приложение, то есть максимум воркеров будет ну десятка три на проход
Мерль
это да, но не на тех объёмах
Ну, если у тебя там горутин сто, то конечно беспокоится нечего
nvkv
мне кажется байтоёбством заниматься на 30 воркерах особого смысла нет
Мерль
Просто, имхо, зачем делать как не надо, если можно сделать как надо?
nvkv
Ну, я вроде попытался объяснить, почему меня беспокоит схема с групвейтом
nvkv
потому что в простой функции внезапно появляется некий стейт, который нужен только ради синхронизации и больше вообще ни для чего
nvkv
мне ещё предстоит полюбить стейт, have mercy
nvkv
пока он меня пугает больше, чем лишние аллокации
Мерль
мне ещё предстоит полюбить стейт, have mercy
В го тебе придётся работать со стейтом, это не скалка и не хускель :3
nvkv
ну вот же
nvkv
это сложно :3
nvkv
надо мозг
nvkv
а у меня нет
Мерль
Ты ещё видимо с context не сталкивался, вот где весь ужос :3
nvkv
Пока нет
Мерль
Советую ознакомиться, полезная и нужная штука
nvkv
спасибоньки, гляну
Мерль
https://golang.org/pkg/context/
Мерль
http://telegra.ph/Go-Newsletter-Issue-144-January-26-2017-01-26
Sergey
Товарищи, подскажите пожалуйста
Sergey
func main() { naturals := make(chan int) squares := make(chan int) // Counter go func() { for x := 0; x < 100; x++ { naturals <- x } close(naturals) }() // Squarer go func() { for x := range naturals { squares <- x * x } close(squares) }() // Printer (in main goroutine) for x := range squares { fmt.Println(x) } }
Sergey
вот есть код, горутины с каналами
Sergey
но ведь он же последовательно выполняется и в данном случае никакой параллельности эе нет
Sergey
правильно я понимаю?
🏳️ Phil
вроде как не правильно
Sergey
хм....
Sergey
или как бы устроено следующим образом
🏳️ Phil
а с чего он последовательно выполняется
Sergey
есть горутина1, которая запихивает в канал1 циферьки
Sergey
и парралельно с ней крутится другая горутина, которая слушает канал1 и только когда в канал1 приходят данные она отрабатывает
Sergey
так правильнее?
🏳️ Phil
ну. так в чем не параллельность? или даже так - а как должна выглядеть параллельность, чтобы сказать: "Вот она!"
Sergey
не не, неправильности никакой нет. я пытаюсь понять
Sergey
разобраться
🏳️ Phil
Строго говоря, в Го не параллельности. есть конкурентное программирование
Sergey
смотрю как работают разные проги, экспериментирую и строю гипотезы )
🏳️ Phil
А чего строить гипотезы, если вроде как всё ясно описано. "Распараллеливание" сопрограмм через "go чтото". Шедулинг по i/o. Общение через каналы. Всё
Sergey
ну, это вам всё понятно 😊 а мне после php не особо понятно
🏳️ Phil
Общение в том числе используется как передача и прием управления за счет шедулинга по i/o
🏳️ Phil
До питона я никогда не сталкивался с конкурентным программитрованием. Да и в нём скорее использовал Twisted или "закат Солнца вручную". Даже без yield.
Sergey
в пыхе тоже есть yeld
🏳️ Phil
ну вот, значит даже ближе чем я к сопрограммам :
Sergey
А методы структуры я могу вызывать как Goрутины?
Slava
да
Sergey
да
Спасибо )
Anonymous
@pronin86 Я Вижу ты используешь книгу Донована и Ритчи. Твой пример, как я его понимаю, он не совсем о параллельности, Как бы да, обе функции работают параллельно, но они синхронизированы между собой с помощью канала так, что будут выполняться последовательно. Это пример о синхронизации двух подпрограмм. На странице 269 (пар. 8.4.1) в третьем абзаце: "Когда x не предшествует y и не происходит после y, мы говорим, что x выполняется параллельно с y. Это не значит, что x и y обязательно одновременны, просто мы не можем ничего утверждать об их последовательности." А так же на странице 303 (пар.9.1 Состояние гонки) описывается параллельность;
Ivan
Привет. Парни, а кто-нибудь делал хранение загружаемых пользователями фото на сервере? Есть опыт с чем-нибудь типа cloudinary imgix?
Anonymous
@pronin86 "ну, это вам всё понятно а мне после php не особо понятно" Попробуй напиши программу, которая принимает подключения одновременно по tcp (порт 9000) и по http (порт 8080). Там увидишь, что без подпрограмм запустить одновременно два сервера не получится и, уверен, сразу поймёшь
Sander
кто-нибудь Caddy server с Docker использует?
Тигран
Всем привет, подскажите пожалуйста что делать если glide install выдает
Тигран
[ERROR] Failed to set version
Тигран
сам я не go программист, просто хочу кое какие go пные программы установить
Daniel
а кто такой этот glide и зачем он?
Тигран
это я насколкько понял аналог cpan для перла
Daniel
не бывает такого аналога
Daniel
вернее - гитхаб за него
Тигран
ну да, просто это вроде программа, которая качает и устанавливает оттуда пакеты
Тигран
с зависимостями
Тигран
вот это glide https://github.com/Masterminds/glide
Тигран
в glide.yml файле, которая идет с прогой смотрю есть пакеты с версиями , а есть без
Тигран
так вот те что без, в github посмотрел вроде в файлах тоже версия не уазывается
Daniel
программа, которая качает и устанавливает, называется go get
Тигран
как можно узнать версию пакета?
Daniel
так что эта, скорее всего, качает и устанавливает пакеты определенной версии
Daniel
как можно узнать версию пакета?
никак. только в сорцы ему глянув
Тигран
вот одна из зависимостей, которая жалуется на отсутствие версии https://github.com/btcsuite/go-socks
Тигран
я там смотрю три файлика, и нигде не найду версию, ее действительно нет, или я что то не досматриваю?
Daniel
ее нет
Daniel
в этом смысле у go все не очень хорошо
Тигран
мм, ладно спасибо
Тигран
оказалось проблема была просто в "старости" glide, обновление glide все решило
Daniel
о!
Andrey
вдруг кто не видел https://github.com/davecgh/go-spew
Kirill
и тут я понял, что забыл в awesome-go принести