
The
07.03.2018
00:06:27
сори, думал чтобы портянку не кидать, кину саму суть кода
https://play.golang.org/p/ivUbq2DrHc-
вот собственно сам код
на каждые три tick, выполняется один tack, канал не буферизированный. если бы он блочился на отправке, тогда tick чередовался с tack.

Google

The
07.03.2018
00:09:43
хотя пример немного неправильный, потому что здесь есть горутина, которая читает и спит, в моем случае чтение из канала происходит только тогда, когда я приду по HTTP и запрошу /api/v1/getInterval, других читателей нету.
но сама суть отправки в небуферизированный канал тут есть

Slava
07.03.2018
00:15:32
так а в чём вопрос? у тебя читает кто-то, твой case в селект записывает туда

The
07.03.2018
00:19:54
вопрос был в том, что внутри select у нас два кейса, либо мы читаем из тикера (допустим, пока не читаем, время не настало), значит мы пишем в getChan, но так как он не буферизированный, то по смыслу каналов мы должны тут подвиснуть, пока кто-то не вычитает из него. Но, если я правильно понял, Go умеет определять читает ли кто-либо из канала, потому что блокировки на этом этапе не происходит. или я что-то не так понял?

Slava
07.03.2018
00:21:34
ещё раз
если у вас каналы для записи не буферезированные, то в селекте при попытке записи или чтения, если никто с другой стороны не читает/записывает, ваш селект будет заблокирован
в вашем примере, по логам видно, что 1) вы ждёте секунду до каждого тикера 2) ждёте 3 секунды до каждого така
что значит что селект блокируется


Andrey
07.03.2018
00:24:42
вопрос был в том, что внутри select у нас два кейса, либо мы читаем из тикера (допустим, пока не читаем, время не настало), значит мы пишем в getChan, но так как он не буферизированный, то по смыслу каналов мы должны тут подвиснуть, пока кто-то не вычитает из него. Но, если я правильно понял, Go умеет определять читает ли кто-либо из канала, потому что блокировки на этом этапе не происходит. или я что-то не так понял?
если кратко. Вы не правильно поняли, Go не умеет определять, блокировка происходит.
Причём блокировка это желаемое поведение. Если вам не нужна блокировка, то надо (даже с буферизованным каналом) варганить сбоку постоянного "читателя", который очищает канал.

The
07.03.2018
00:29:17
Если внутри select ни один из кейсов не выполняется, но есть один кейс записи в канал (небуферизированный, из которого никто не читает), запись не происходит, select блокируется до наступления другого доступного case?

Andrey
07.03.2018
00:29:35
сам селект не блокируется.

Google

Andrey
07.03.2018
00:30:38
ну то есть он блокируется, но только если все case заблокированы, а не один из них

The
07.03.2018
00:31:40
Я думал так, например есть select, c двумя case:
1. чтение из канала
2. запись в канал (небуферизированный, из которого никто не читает)
если читать нечего, пишем в канал, если из канала никто не читает, то все, горутина зависла до тех пор, пока кто-то не прочитает из этого канала, и все другие case идут лесом. сейчас как-то тупо звучит, конечно, но минут 10 назад выглядело логично))

Andrey
07.03.2018
00:32:29
чтоб понять это, поставьте log сообщения в перед и после селекта.
если они будут постоянно писаться и между этими сообщениями ничего нет, то вы "проскочили" select. Если перед "после" есть пауза - то селект заблокирован

Slava
07.03.2018
00:34:28
Я думал так, например есть select, c двумя case:
1. чтение из канала
2. запись в канал (небуферизированный, из которого никто не читает)
если читать нечего, пишем в канал, если из канала никто не читает, то все, горутина зависла до тех пор, пока кто-то не прочитает из этого канала, и все другие case идут лесом. сейчас как-то тупо звучит, конечно, но минут 10 назад выглядело логично))
в целом так и есть, никто не пишет, никто не читает - ждём

Andrey
07.03.2018
00:34:34
select ждёт события на любом из case, и блокируется, если событий нет (произошла запись или чтение)
можно сделать неблокирующий select, используя default

The
07.03.2018
00:35:49
так получается, что Go умеет определять, если ли читатель из канала)) ведь он пишет в канал только в том случае, если него кто-то читает, а событие отправки в канал является первоочередным. или я опять что-то не так понял?
т.е. он определяет, выполнима ли операция отправки в канал, но она выполнима только в том случае, если либо канал буферизированный и буфер имеет пространство, либо есть читатель из канала

Andrey
07.03.2018
00:37:19
у select'а нет приоритетов, вы можете case'ы тасовать как угодно, от этого поведение не меняется

The
07.03.2018
00:37:39
не, я понимаю что там рандом

Andrey
07.03.2018
00:39:13
воспринимайте select как много параллельных команд. Сначала вы параллельно запускаете все чтения и записи, которые у вас есть в case'ах. Потом, последней командой, ждётё события на любом из каналов.

The
07.03.2018
00:40:10
Не сочтите за наглость, но можно попросить вас отвечать на ворпосы да или нет, так я быстрее пойму и не буду отнимать ваше время? :)

Andrey
07.03.2018
00:40:40
да
:)

The
07.03.2018
00:41:09
В обычном случае, если мы из горутины отправим в небуферизированный канал из которого никто не читает, то она зависнет на операции отправке в канал, верно?

Andrey
07.03.2018
00:41:27
да

The
07.03.2018
00:43:14
В случае с select, если ни один из кейсов не может быть выполнен (нечего читать), но есть один кейс, в котором происходит запись в канал (опять же, небуферизированный, из которого никто не читает), то сама запись не производится, верно?

Andrey
07.03.2018
00:45:24
не производится
вы зря запись от чтения отделяете. механизмы блокировки одинаковы. Воспринимайте case как операцию с каналом, не важно, чтение это или запись.

Google

The
07.03.2018
00:48:18
Получается, что Go определяет возможность выполнения case, а если канал небуферизированный, то возможность выполнения case может быть только тогда, когда есть читатель. Тогда, получается, Gо знает и умеет определять, есть ли читатель на другом конце канала? Если есть - то отправляем, а нет - значит сидим внутри select и блокируемся (ждем, пока хотя бы один case станет выполним)
т.е., допустим мы вышли из select, зашли на следующую итерацию цикла, вошли в select, ни один из case не выполним, и тут бац, появляется читатель на канале, тогда выполняется case с отправкой в канал.
внутри select немножко другое поведение получается при отправке в канал, если я правильно все понял из дискуссии. отправим мы только в том случае, когда кто-то будет читать оттуда.


Andrey
07.03.2018
00:54:31
> Gо знает и умеет определять, есть ли читатель на другом конце канала
Внутри любой программы на Go, помимо вашего кода есть runtime. Он работает постоянно, и если находит пару читатель/писатель с одним каналом, он их разблокирует.

The
07.03.2018
00:56:03
да, теперь я понял, спасибо за пояснения @gorilych и @m0sth8

Andrey
07.03.2018
00:58:19
с select есть специфика, которую я и сам не до конца понимаю. Вот если есть два case с одним каналов, один на чтение, другой на запись - оно всё равно блокируется
https://play.golang.org/p/k7m0B37b83x

The
07.03.2018
00:59:20
а помоему тут все логично
хотя вы меня пару минут назад учили и объясняли мне, все же вырожу свою мысль)))
если следовать логике, то внутри select есть два состояния, первый это заблокированный, значит что ни один из кейсов не выполним, второй - в работе, значит что хотя бы один case выполним.
в данном случае, ни один из кейсов не выполним, потому что запись не может быть выполнена (никто не читает), а чтение не может быть выполнено (никто не записывает)

Andrey
07.03.2018
01:02:25
в моём понимании, select на каждый case порождает горутину, и они выполняются _параллельно_

The
07.03.2018
01:03:06
а если мы добавим буфер, тогда операция записи становится возможна (канал же с буфером), и, следовательно, операция чтения будет возможна (в канале уже что-то будет)

Slava
07.03.2018
01:04:33

Marlik
07.03.2018
01:04:38

Slava
07.03.2018
01:04:54
соответственно в вашем примере, каждый раз либо не будет никто ещё читать, либо никто ещё не записал

Andrey
07.03.2018
01:05:36

Slava
07.03.2018
01:06:02
последовательно, но рандомизируя список каждый раз

Marlik
07.03.2018
01:06:03

Slava
07.03.2018
01:06:32

Google

Andrey
07.03.2018
01:08:10
так?

The
07.03.2018
01:08:49
ночь знаний)))

Andrey
07.03.2018
01:10:27
короче, надо читать https://golang.org/src/runtime/select.go

Marlik
07.03.2018
01:11:24
нет
Вот видос просто видел https://www.youtube.com/watch?v=uO268voCGwA

Andrey
07.03.2018
01:11:31
чтобы понимать код на go, надо читать код на go. Однако, рекурсия

Slava
07.03.2018
01:12:47

Marlik
07.03.2018
01:15:21
Если бы я рулил этой конторой, то посмотрев на экономию, я бы бежал от пыхи сломя голову.

Andrey
07.03.2018
01:16:28
экономию в чём? Сколько будет стоить переучить толпу php разработчиков на go и переписать Zend на go?

Admin
ERROR: S client not available

Marlik
07.03.2018
01:17:41
Мда.))
Пили, ели, веселились, протрезвели, акуели.

The
07.03.2018
01:18:54
под каждую задачу - свой инструмент.

Andrey
07.03.2018
01:18:55
не надо бежать сломя голову, а то и правда сломать можно :)
там у них была маленькая задача, которую (как оказалось после анализа), можно заменить.

Marlik
07.03.2018
01:20:59
Недавно доклад смотрел, люди понимали что рано или поздно упрутся в стену, и переписали на го, пришлось переучиваться правда, но профит на лицо.
https://www.youtube.com/watch?v=HoEn7lXNQOU а вот оно.

Pawel
07.03.2018
05:26:13

Artem
07.03.2018
05:35:24

Google


Pawel
07.03.2018
05:50:25
на флагах исследователей и специалистов решающих задачи ML.
основа всех сетей бекпропогейшен -это последовательный алгоритм. А весь препроцессинг который делает питон это фактически Си и обертки.
cuda, которую Гоша не поддерживает
И главное то, что никто не будет учить синтаксис и заморачиваться с беднейшей стандартной библиотекой. Но и как бы в ML не программисты...
Вообще это все бред, о чем речь? Go в машинном обучении нет, в данном случае не рассматривается вообще, это все равно что говорить о lisp в ML. до тех пор пока хотя бы на kaggle не начнут решать задачи на Go и не покажут хоть сколько нибудь значимый результат.
p.s. к слову по поводу вчерашнего обсуждения - пообщался с парой людей в теме, и нифига... бизнес (например потребительская электроника, еда, фешен) по прежнему использует простейшую логрег и DL пока очень далек от реальности, разве что в зрении и речи уже активно используются сети чаще.
на флагах исследователей и специалистов решающих задачи ML.
ахаха))
основа всех сетей бекпропогейшен -это последовательный алгоритм
да, я вижу вы глубоко в теме.
cuda, которую Гоша не поддерживает
при чём тут вычисления на видеокартах Nvidia? вы что, не трезвый?
И главное то, что никто не будет учить синтаксис и заморачиваться с беднейшей стандартной библиотекой. Но и как бы в ML не программисты...
штааа???
Вообще это все бред
это точно
Go в машинном обучении нет, в данном случае не рассматривается вообще, это все равно что говорить о lisp в ML
а кто говорит про это и что это такое вообще?
бизнес (например потребительская электроника, еда, фешен) по прежнему использует простейшую логрег и DL
это к чему?


Artem
07.03.2018
05:54:35
на флагах исследователей и специалистов решающих задачи ML.
ахаха))
основа всех сетей бекпропогейшен -это последовательный алгоритм
да, я вижу вы глубоко в теме.
cuda, которую Гоша не поддерживает
при чём тут вычисления на видеокартах Nvidia? вы что, не трезвый?
И главное то, что никто не будет учить синтаксис и заморачиваться с беднейшей стандартной библиотекой. Но и как бы в ML не программисты...
штааа???
Вообще это все бред
это точно
Go в машинном обучении нет, в данном случае не рассматривается вообще, это все равно что говорить о lisp в ML
а кто говорит про это и что это такое вообще?
бизнес (например потребительская электроника, еда, фешен) по прежнему использует простейшую логрег и DL
это к чему?
о чем речь вообще? вы уж простите но несете какую то ересь... выражения типа шта... че... ахаха -это детский сад и клоунада откровенная. О чем речь и в чем ваш вопрос? Если есть хоть какой то аргумент, кроме питон гавно и в ML хипстеры я готов послушать. Лучше, если вы хоть раз решали хоть одну задачу похожую и понимаете о чем речь, поскольку пока этот лигбез меня утомил :)
Текст о бизнесе был в контексте вчерашнего обсуждения о том. что я "устарел" и ритейл с маркетингом используют нейронные сетки -уточнил, это бред, все используют логистическую регрессию и никакого дл там нет и в помине. Просто лень искать обсуждение и потому в общей простыне буквы поместил.


Pawel
07.03.2018
06:03:31
"вы уж простите но несете какую то ересь..." - какую именно? я ничего и не утверждаю
"О чем речь и в чем ваш вопрос?" - вопрос - на кой хрен вы тут вспомнили библиотеку для вычислений на видюхах? вопрос - Что вы имели ввиду в ваших высказываниях выделенных курсивом? они похожи на бессвязное словоизвержение под веществами. При чём тут ликбез?
у меня не было аргумента "питон гавно", про ML я вообще не слова не сказал.

Artem
07.03.2018
06:24:31

Alexey
07.03.2018
06:31:50
Коллеги, пожалуйста, снизьте градус :)

Pawel
07.03.2018
06:31:59
"вы хотели использовать конкурентность Го, которая никому не нужна." - кому не нужна? здесь в чятике все кто программирует на Го её используют и довольны
"Задействовать какие то ядра, когда все задачи решаются на GPU. " - так это чистая незамутнённая шизофрения. Использовать GPU и не использовать при жтом ядра основного проца - это абсолютно клинический случай.
"О чем речь вообще? Все ваши слова может понадобится... Полезна, не критична -это о чем вообще? Кому это нужно?" - у вас каша в голове, вы не можете держать в голове более трёх простых связанных мыслей? Я напомню:
вычисления на процессоре ни о чем вообще (и на 10 и 100 процессорах).
Алгоритмы используемые в ML сегодня не паралелятся в большинстве.
это пример того, что требует пояснений. Впрочем уже не требует, для меня с вами всё ясно.

Alexey
07.03.2018
06:33:24

Pawel
07.03.2018
06:34:05

Alexey
07.03.2018
06:35:03
Словами «с вами всё ясно»? Серьёзно?

Pawel
07.03.2018
06:36:38
количество попытко ограничено, предел терпения достигнут, пора подводить итог "дискуссии"


Artem
07.03.2018
06:44:22
"вы хотели использовать конкурентность Го, которая никому не нужна." - кому не нужна? здесь в чятике все кто программирует на Го её используют и довольны
"Задействовать какие то ядра, когда все задачи решаются на GPU. " - так это чистая незамутнённая шизофрения. Использовать GPU и не использовать при жтом ядра основного проца - это абсолютно клинический случай.
"О чем речь вообще? Все ваши слова может понадобится... Полезна, не критична -это о чем вообще? Кому это нужно?" - у вас каша в голове, вы не можете держать в голове более трёх простых связанных мыслей? Я напомню:
вычисления на процессоре ни о чем вообще (и на 10 и 100 процессорах).
Алгоритмы используемые в ML сегодня не паралелятся в большинстве.
это пример того, что требует пояснений. Впрочем уже не требует, для меня с вами всё ясно.
возможно вам сложно это понять по все ядра итак задействуются фреймворком.
здесь в чатике возможно и довольны конкурентностью Го, вот только я ниразу не слышал такой потребности от того, кто занимается data science.
Напоминать не нужно, это лишь одна цитата, ваших шта было больше.Вы несете чушь еще раз. И повторю последний нет потребности в задействовании возможностей, которые есть у Go и спецефичны для него. Просто нет таких проблем а те проблемы которые есть Go решать просто не умеет и более того не умеет того, что все используют сегодня


Alexey
07.03.2018
06:45:13
Мне кажется, что уровень дискуссии определяют все участники. Любой может его поднять, не используя подходы «в интернете кто-то не прав, сейчас я его, суку, размажу» и «да что с ним говорить, дебил конченный». Уважать собеседника (живого человека) и его мнение совсем не сложно, и часто можно чему-то научиться. Используя слова типа «чушь ещё раз» ничему научиться нельзя, только самоутвердиться, что в интернетах довольно бессмысленно

Artem
07.03.2018
06:45:24

Alexey
07.03.2018
06:45:29
Поэтому – мы можем поднять уровень дискуссии? ?
Если не можем, то, может, её и не продолжать?

Мерлин
07.03.2018
06:48:58
На этой ноте я предлагаю закончить дискуссию


Artem
07.03.2018
06:49:37
количество попытко ограничено, предел терпения достигнут, пора подводить итог "дискуссии"
но я могу в отдельное сообщение для вас выделить ответ на ваше ШТА, которое вы пояснили (чтобы была мотивация пояснить шта до этого в тексте, их было 3 и после этого, еще 2). Про процессоры речь была о том, что никому это не нужно (повторить? и не важно что это нужно программистам на Го -это принципиально разные задачи). Более того все ядра утилизируются сегодня в том числе при использовании питона. А вот невозможность использовать GPU критична. Потому я и говорил о том, что вы не понимаете предмета и я не хочу заниматься ликбезом, если вы не понимаете о чем речь -говорить с вами не о чем. Покажите мне реальную задачу где вы планируете применить то о чем говорите и как, покажите хоть одну задачу которую вы решили в машинном обучении, чтобы понимать о чем речь.. вы пока похоже совершенно не представляете себе предмeтную область и рассуждаете на уровне ванги
На этой ноте я предлагаю закончить дискуссию
согласен я не вижу повода общаться с откровенным троллем рассуждаеющем о том, от чего он далек и чего вообще не понимает приводя в качестве примера то. что иcпользуют тут в чате аргументируя этим то, что нужно в параллельном мире.


Alexey
07.03.2018
06:51:56
> Более того все ядра утилизируются сегодня в том числе при использовании питона.
Это возможно, но требует гораздо больших усилий, чем на Go, где можно писать просто линейный код. GIL в CPython мешает.
> А вот невозможность использовать GPU критична.
Я бы сказал, что низкая выразительность языка даже более критична. Мы делали ML на Go – _очень_ много нужно писать. И связанно это не с отсутствием библиотек (всё нужное нам было), а именно с языком.

Artem
07.03.2018
06:52:09

Alexey
07.03.2018
06:52:32
Apache Spark?