@proGO

Страница 726 из 1674
Dmitri
21.07.2017
06:46:49
Michael
21.07.2017
06:47:05
или просто кривой перевод

Dmitri
21.07.2017
06:47:39
да если честно нифига не понятно, вообще их избегаю все через мутексы делаю
Смотри, на пальцах: Каналы бывают буферизованные и небуферизованные. Сначала про вторые:

Фактически, это значение нужного тебе типа. 1 шт.

Google
Eldar
21.07.2017
06:48:00
я читаю на английском, но не так комфортно как на русском, не родной язык и все

Dmitri
21.07.2017
06:48:44
Поддерживается 2 операции: сунуть и вынуть.

Michael
21.07.2017
06:49:26
при этом явно Lock делать не надо

Eldar
21.07.2017
06:49:27
сунуть я понял а вот когда и где и как их вытаскивать не понял

Dmitri
21.07.2017
06:49:28
Если рутина пытается сунуть, а там уже всунуто, рутина блокируется, пока другая не вынет.

Когда рутина пытается высунуть, если никто не всунул, она блокируется, пока кто-то не всунет

Eldar
21.07.2017
06:50:41
вот конструкция select зачем

Dmitri
21.07.2017
06:51:06
это если рутина хочет пропалить несколько каналов, не всунул ли кто в один из них

Eldar
21.07.2017
06:51:07


вот ради теста накатал

Dmitri
21.07.2017
06:52:07
в конкретно этом случае, проще for val := range ch

а теперь представь ситуевину, когда канала у тебя два

i
21.07.2017
06:52:25
select нужен для неблокируещего чтения из канала

Google
Dmitri
21.07.2017
06:53:13
короче, смотри: 2 канала. В один суются сообщения, а во второй - команды "прекратить фигню"

если без селекта, твоя рутина возьмет первый из каналов и заснет, пока в него не придет сообщение. Отработает его и будет спать, пока не придет команда "прекратить фигню". Остальные сообщения, соответственно, не придут.

Eldar
21.07.2017
06:54:24
я так понял конструкция select нужна если каналов больше чем 1?

Dmitri
21.07.2017
06:54:45
с селектом рутина будет просыпаться по событию на любом из каналов

Eldar
21.07.2017
06:57:14
у меня была следующая ситуация которую я сделал с помощью мутексов было 3 запроса к БД в одной функции, они никак не связаны между собой ни на что не влияют, вот такую ситуацию можно было реализовать через каналы или нет? по сути простой асинхронный вызов 3х функций

Dmitri
21.07.2017
06:59:42
ch1 := make(chan string) ch2 := make(chan string) go func() { for { ch1 <- "Hello1" } }() go func() { for i := 0; i < 10; i++ { ch1 <- "Hello2" } }() go func() { for { select { case msg := <- ch1: fmt.Println(msg) case msg := <-ch2: fmt.Println(msg) } } }()

вот на такие случаи селект нужен

i
21.07.2017
07:01:21
select ещё нужн для таймаута чтения из канала

Eldar
21.07.2017
07:01:53
запустил, бесконечный цикл и выполняется только 1я рутина вернее 2я где (Hello 1)

Dmitri
21.07.2017
07:03:36
запустил, бесконечный цикл и выполняется только 1я рутина вернее 2я где (Hello 1)
не совсем так. Там Hello2 стреляет 10 раз и завершается. Hello1 продолжает фигачить. Без селекта оно 10 раз отработает, а потом сдохнет на ожидании Hello2

ну да я попутал насчет мутексов, через waitgroup и делал
внутри WaitGroup - буферизованный канал

или вру?

не, это в ограниченных очередях буферизованный канал

Eldar
21.07.2017
07:05:08
ну спасибо, вот теперь бы найти в чем их применить и где))))

я запоминаю только из под практики, теория в моей голове ветренна)))

Dmitri
21.07.2017
07:06:00
ну спасибо, вот теперь бы найти в чем их применить и где))))
допустим, ситуация, когда очередей событий более 1

смотри, представляем такую конструкцию:

Google
Dmitri
21.07.2017
07:06:46
у тебя 3 источника событий

каждый из них - черный ящик, из которого наружу торчит только канал строк

допустим источников 3:

1. таймер, посылающий событие раз в 10 секунд

2. таймаут, который через полчаса должен сказать "конец всему, закрываемся"

3. чат, из которого сыплются сообщения

все их надо отработать в одной функции

func workWithChannels()

каналы timerChan, timeoutChan, chatChan

берем в лоб: for { fmt.Println(<-chatChan) // сообщение из чата в stdout <-timerChan //дожидаемся сработки таймера fmt.Println("10 sec") if <- timeoutChan {//дожидаемся таймаута panic() //жоско выходим } }

первая инструкция кладет рутину в слип, пока с чата не придет сообщение. Т.е., пока кто-то тебе не напишет, событие от таймера ты не отработаешь, команду "выйтинах" рутина не увидит

вторая - не дает что-то сделать, пока не пришло сообщение от таймера. Т.е. сообщение не чаще раза в 10 секунд

третья вообще говорит: отработай одно сообщение, выжди 10 секунд и спи, пока не скажут "рабочий день окончен"

вероятно в изначальной логике такое поведение не планировалось)

Eldar
21.07.2017
07:18:47
спасибо большое за разъяснение, сново появился стимул дальше утить go))

Dmitri
21.07.2017
07:24:40
короче, <-chan - это "ждать, пока в канал не придет значение" Если каналов больше одного, нужен селект, чтобы рутина не переходила в режим "по одному сообщению с канала за проход".

Alex
21.07.2017
08:30:24
“How to Turn an Android Device into a Web Server” @MakisMaropoulos https://medium.com/@kataras/how-to-turn-an-android-device-into-a-web-server-9816b28ab199

От известного в узких кругах Gerasimos'a

aka Kataras'a

Продвигает Iris как может :)

Google
Альберт
21.07.2017
08:52:34
Всем привет, скажите, у всех при отладке кода в phpstorm с плагином go от jetbrains постоянно происходят скачки курсора в разные участки кода? например цикл работае тс переменной, происходит скачек на место где эта переменная объявлена,

Ashot
21.07.2017
08:57:21
а зачем phpstorm когда есть gogland?
Если честно, гогланд у меня тоже дебажит как кусок говна

Vladimir
21.07.2017
08:57:44
они опенсорсный delve используют.

Альберт
21.07.2017
08:58:05
У меня просто куплен пыхшторм) Хм, если в гогланде та же фигня и вижу что у многих такая же тема, то ладно потерплю) теперь знаю что не один)

Vladimir
21.07.2017
09:03:01
OS?
макось и линуксы

Anton
21.07.2017
09:21:51
А что, atom.io не торт что ли? Я в нем пишу

Ashot
21.07.2017
09:23:30
А что, atom.io не торт что ли? Я в нем пишу
Я лично просто привык к продуктам JetBrains, потому что джавист

Anton
21.07.2017
09:23:55
Я привык к vim и раньше писал в нем, в основном на python :)

Artyom
21.07.2017
09:41:50
Друзья, всем привет! Проводим тест php7 vs go. Тест заключается в следующем: * запрос к бд * вернуть результат То есть, ни авторизаций, ничего прочего. Просто sql запрос и вывод строки. Результаты следующие: на 1000 запросов php7 справился быстрее на 30%. Как такое может быть ? Пробовали в go держать одно соединение с базой - результат не изменился.

i
21.07.2017
09:44:45
наверное, код на C из php будет быстрее кода на Go

Vladimir
21.07.2017
09:45:07
Без кода никто ничего не скажет:)
и еще конечно хотя бы тип БД

Alexey
21.07.2017
09:45:49
Может, из php запросы параллельно шли, а в go - последовательно. Ну и 4 ядра на машине:)

Ivan
21.07.2017
09:46:19
вы базу одну и ту же тестируете или разные? :)

Vladimir
21.07.2017
09:46:20
наверное, код на C из php будет быстрее кода на Go
не должен .... , если нет замены транспорта (типа вместо TCP UDP)

Google
Artyom
21.07.2017
09:46:27
и еще конечно хотя бы тип БД
MySql , но пытались замерить именно скорость языка. Думаю, можно сделать вывод, что и с другими БД будет аналогичная ситуация

Sergey
21.07.2017
09:46:58
есть подозрение, что без кода вам никто ничего не скажет.

Alexey
21.07.2017
09:47:24
Eldar
21.07.2017
09:47:28
5 точно не быстрее го

Artyom
21.07.2017
09:48:00
i
21.07.2017
09:48:14
не должен .... , если нет замены транспорта (типа вместо TCP UDP)
Если локально, то вообще unix socket скорее всего

Vladimir
21.07.2017
09:49:24
Если локально, то вообще unix socket скорее всего
сокеты бывают 2-х типов (стрим=TCP, датаграм=UDP)

сокеты бывают 2-х типов (стрим=TCP, датаграм=UDP)
экономия на транспорте может достигать x5

i
21.07.2017
09:51:55
Даже пришлось гуглить, там не TCP или UDP

i
21.07.2017
09:55:12
MySQLoverIP?
С локальной базой, если указать localhost, используется /var/lib/mysql/mysql.sock

Alexey
21.07.2017
09:55:33
сокеты бывают 2-х типов (стрим=TCP, датаграм=UDP)
https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%BA%D0%B5%D1%82_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0_UNIX

Vladimir
21.07.2017
09:57:47
https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%BA%D0%B5%D1%82_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0_UNIX
запутали .... дак это вообще не сеть а обмен через память(ну заменили Ethernet памятью... а дальше все тоже самое) ! 8))))))) ... Читайте дальше а не только заголовок , даный вид сокетов делится на Stream=TCP и Datagram=UDP

Страница 726 из 1674