
none
21.01.2018
17:29:46
должно отдавать 3 строчки, но отдает 2

Ilya
21.01.2018
17:37:51
Когда jobs =nil, вываливаешься из цикла не успевая вычитать все из резалт канала

none
21.01.2018
17:38:19
как решить?

Александр
21.01.2018
17:53:24

Google

Александр
21.01.2018
17:53:36
он успевает пройти же

Alexander
21.01.2018
17:55:09

Александр
21.01.2018
17:55:54
странно что даже вангига нету
как решить?
когда ты сделал break, то все вываливается из цикла и все гоурутины умирают. Выход использовать waitgroup

none
21.01.2018
17:57:10
ок, спасибо буду пробывать

Александр
21.01.2018
17:57:49
а может ты объяснишь задачу? а то как то стартовать гоурутины который хреначат в канал на основе сообщения в канал странно

none
21.01.2018
18:09:50
ну я просто смотрел как можно селектом работать с каналами
чисто ради интереса
нет задачи конкретной

Александр
21.01.2018
18:10:13
ты имей введу что гоурутины плодить бесконечно нельзя
оптимально это по количеству ядер
none

Google

none
21.01.2018
18:11:04
спасибо за совет :)

Александр
21.01.2018
18:12:27
спасибо за совет :)
в твой ситуации лучше запустить несколько хедлеров на 1 канале (одинаковых), с буферизированным каналом

meehalkoff✪
21.01.2018
18:12:49

Александр
21.01.2018
18:12:56
и внутри уже не плодить гоурутины
Звучит как будто выдрано из контекста
я просто предупредил, что это далеко не бесплатно и радужно ? От того что наделаешь 10000 гоурутин врятли у тебя будет приложение с понями и радугой
я на эти грабли уже вьехал
и я про гоурутины которые долго выполняются

Mykyta
21.01.2018
18:16:25

Timur
21.01.2018
18:53:21

Александр
21.01.2018
18:54:00
а куда по вашему вычислительные операции? ? там на гоурутинах дерево перестраивалось

Timur
21.01.2018
18:54:05
Если у вас только вычисления то количество горутин равно количеству ядер

Александр
21.01.2018
18:54:10
ничего вроде сложного но очень много элементов

Timur
21.01.2018
18:55:00
Перестроение дерева - вычисления
Рантайм тоже наложит свою плату

Александр
21.01.2018
18:57:57
оно рекурсивное, дерево не большое, на пару миллионов записей ?
корневых веток около 40
по количеству ядер

Timur
21.01.2018
19:01:23
Альтернатива для чего? Какая задача? Если задача - сделать вычисления параллельно то горутины по количеству ядер + канал

Александр
21.01.2018
19:01:52
просто вы так написали, будто есть еще какой то инструмент помимо гоурутин ?

Google

Timur
21.01.2018
19:01:53
Но это же не абстрактная задача в вакууме. Контекст какой?

Александр
21.01.2018
19:02:18
да я решил ее, год назад ?
я просто человеку написал как делать не стоило бы

Timur
21.01.2018
19:03:09
Ну я к тому, что в определенных задачах нужно 10к горутин и приложение при этом получается с понями и радугами))) вопрос в том, какая задача

Александр
21.01.2018
19:03:36
врятли оно получится с понями на 10k одновременно работающих гоурутин ?
накладные расходы будет шо писец

Timur
21.01.2018
19:03:55
Так они не могут одновременно работать никогда
Одновременно работает количество горутин равное количеству ядер

Александр
21.01.2018
19:04:14
блин... ну не прикапывайтесь ?

Timur
21.01.2018
19:04:27
Ок)

Александр
21.01.2018
19:04:40
я относительно языка говорил, так то ежу понятно

Timur
21.01.2018
19:05:46
Одновременно 10к горутин спокойной существуют в рантайме, даже 100к если хотите, но опять-таки смотря что внутри горутины и какая задача))
Больше не придираюсь)))

Александр
21.01.2018
19:06:54
так лучше приложение не строить ?
один хрен упремся в проц

Timur
21.01.2018
19:07:07
Бывают разные задачи)

Александр
21.01.2018
19:07:16
даже если это api http у которого хендлеры
но вообще я мечтаю когда нибудь пропускная способность вырастет настолько что не будет важно обмениваемся мы внутри платы или между ПК
тогда возможно будет делать мега-гиго процессоры, по сети

Google

Александр
21.01.2018
19:12:57
и запускать приложения под винду на все доступные сетевые ядра (100000 тысяч+- штук) ? без написания микросервисов

Zaur
21.01.2018
19:35:10
?
народ, как в шаблонизаторе работать с вложенными циклами? . это текущий итератор. А если у меня 2 вложенных цикла и я хочу внтури второго иметь к обеим доступ?

Alexander
21.01.2018
19:36:36

Slava
21.01.2018
20:36:32
а никто не хочет добавить поддержку map[string]string, map[string]int в мою библиотеку парсинга флагов в структуры?
https://github.com/octago/sflags/issues/7

Zaur
21.01.2018
23:16:04
Почему интересно в этом задании голанг с таким треском проигрывает С++, java и остальным
http://benchmarksgame.alioth.debian.org/u64q/binarytrees.html

Admin
ERROR: S client not available

Zaur
21.01.2018
23:19:00
2.5 секунды плюсы
34 (!) секунды голанг
Задание сгенерировать Бин дерево и посчитать количество узлов для каждой глубины
Почему интересно такой эпик фейл. Медленная работа с памятью? Рекурсия?
В остальных тестах, кроме регулярок, +- на уровне плюсов и rusta

Max
21.01.2018
23:30:00
Ну можешь оптимизировать:
http://benchmarksgame.alioth.debian.org/u64q/program.php?test=binarytrees&lang=go&id=4

Zaur
21.01.2018
23:31:27

Max
21.01.2018
23:31:44
Как у Go с хвостовой оптимизацией рекурсивных вызовов?
Вот это:
func bottomUpTree(depth int) *Node {
if depth <= 0 {
return &Node{nil, nil}
}
return &Node{
bottomUpTree(depth-1),
bottomUpTree(depth-1),
}
}
Можно развернуть в цикл например, если у него с этим не очень
Можно еще переписать WaitGroup на атомики.
Посмотрел реализацию C++
Так они там используют OpenMP + Apache Portable Pool - не самый быстрый способ работы с парралельным кодом, так что там все еще быстрее может быть

Zaur
21.01.2018
23:46:08
По-моему проблема раскрытия рекурсии в цикл в том, что по условию нельзя хранить узлы ни в каких арраях и т.п. структурах данных
http://benchmarksgame.alioth.debian.org/u64q/binarytrees-description.html#binarytrees

Alexander
21.01.2018
23:48:00
Простым добавлением debug.SetGCPercent(1000) в код бенчмарка я уменьшил время выполнения в два раза. При этом расход памяти вырос в 5 раз.
Совсем отключить сборщик мусора не получится, т.к. памяти нужно будет слишком много и всё сэкономленное время уйдёт на ввод-вывод при свопе

Google

Zaur
21.01.2018
23:54:55
Вот оно что.
А разница с c# и java это разница оптимизации работы сборщиков?

Mike
21.01.2018
23:56:32

Zaur
21.01.2018
23:59:30

Max
22.01.2018
00:10:08
Хотя смотрю атомики не сильно меняют картину в Go
https://play.golang.org/p/PbTS6BmY6hU
Кстати почему play.golang.org не выводит время? Оно всегда нулевое

Slava
22.01.2018
00:13:59
Оптимизация такая
Там время виртуальное
И детерменированное
Как и рандом ;)

Max
22.01.2018
00:22:43
Рандом везде детерменинрован, если мы говорим о псевдослучайных генераторах, а не скажем рандом байтов в криптографии

Marlik
22.01.2018
00:29:29
Кстати, как простенький рандом сваять в одну строку? Желательно как-то так:
r := int(random(timestamp))

Max
22.01.2018
00:48:40
random := rand.New(rand.NewSource(time.Now().UnixNano()))
r := strconv.Itoa(random.Intn(math.MaxInt32))
Не знаю, может можно и проще, но это какой то пи** извиняюсь, даже в Си проще с этим

Marlik
22.01.2018
00:50:11

Max
22.01.2018
01:05:37
Можно чуть проще:
rand.Seed(time.Now().UnixNano())
r := strconv.Itoa(int(rand.Int31()))

Mike
22.01.2018
02:09:16
а читалки /dev/urandom нет?

Max
22.01.2018
02:40:05
а читалки /dev/urandom нет?
Используй "crypto/rand" пакет
b := make([]byte, 16)
if _, err := rand.Read(b); err != nil {
fmt.Println("error:", err)
return
}
fmt.Println(b)
Проверка на err обязательна, так как буфер с энтропией может быть пустым