Разве? Ведь loadComments вызывается только один раз.
Кстати, рекурсивную функцию, пожалуй, тоже удобнее засунуть вовнутрь.
func loadComments(root intTree) map[int]comment {
var wg sync.WaitGroup
result := make(map[int]comment)
in := make(chan int)
out := make(chan comment)
nWorkers := 2
for i := 0; i < nWorkers; i++ {
go func() {
for id := range in {
out <- getCommentById(id)
}
}()
}
var loadCommentsInner func(node intTree)
loadCommentsInner = func(node intTree) {
for _, c := range node.children {
loadCommentsInner(c)
}
wg.Add(1)
in <- node.id
}
go func() {
for c := range out {
result[c.Id] = c
wg.Done()
}
}()
loadCommentsInner(root)
close(in)
wg.Wait()
close(out)
return result
}
Да, на любом. Особенно удобно, если язык поддерживает семантику перемещения и её не требуется обеспечивать вручную.
В го каналы применяют для решения двух проблем многопоточности — явной передачи права на владение объектом и управления временем жизни потока. Ну, в теории. А так, обычное дело: берешь библиотеку, а там утечка потоков.
Do not communicate by sharing memory; instead, share memory by communicating.
Я бы, наверное, описанную задачу решал так: не запускал горутину на каждую запись, а создал пул воркеров с входными и выходными каналами, во входной пихал айдишники, с выходного сваливал результаты в мап, потом закрыл входной чтоб воркеры закончились, а из мапа по-новой построил дерево. Никаких блокировок или гонок.
Я о том же. Большое количество ссылок на статью отнюдь не гарантирует её качества. Однако, и самоцитирование в общем случае не коррелирует с низким качеством работ автора.
Ссылка — это не отзыв. Это дополнительная информация по теме статьи.
Или, например, если в первой статье у вас постановка задачи исследования и предложение новых подходов, а во второй — полученные результаты, то достаточно странно было бы не сослаться из второй на первую.
Хипстеры используют E-ink. OLED для нищебродов, он сейчас дешевле экрана от Нокии. Какой смысл в экономии флэша, если чипы с 4к и 128к стоят ровно те же 100 рублей? Да, код будет близким, если библиотеки похожие. Только и размер примерно совпадёт. Добавить WiFi и сервер с TLS и привет, мегабайт.
Новые языки не так плохи, удобство разработки быстро перевешивает накладные расходы на рантайм, особенно в разовых проектах.
Эмбед разный. Инструмент по задаче.
Не всем надо гнать десятки мегабайт данных в секунду. Если мне нужно раз в минуту взять число из датчика CO2, выложить его на OLED экран и отдать по вайфаю, скриптовый язык подойдет оптимально. С использованием готовых модулей такой проект редко превышает десяток строк кода. Правда, в 128 килобайт флэша это всё лезет с трудом, модули приходится минифицировать. Но и с плюсами порой удивляешься, как резко растёт бинарник после всего одного дополнительного библиотечного вызова.
Самое простое программирование микроконтроллеров, которое мне доводилось видеть — проект Espruino с почти полноценным Javascript на борту. Интерпретатор даёт непривычный опыт, особенно в отладке.
Заливал на Maple mini, плата вроде Bluepill, но вдвое дороже, чип там CB вместо C8.
Для экономии сейчас можно смотреть на esp8266.
Абсолютное количество большой роли не играет. Если трава растет сама, без вспашки, посева, полива и уборки, затраты могут быть кратно ниже, чем в овощеводстве, например.
Почему не годятся? Человек чем-то от других животных принципиально отличается? Китайцы, пользуют, в результатае выращивают рис по 3000 лет на одном поле без севооборота.
Точно нет, потому что и id и числа в колонке self% упорядочены.
PS. Глянул файлик за 17 год. Из 100000 имеют индекс самоцитирования выше 50% меньше 300 человек. Из них русских 13, потенциальных (не указана страна) ещё 6. 9 австралийцев, 12 китайцев, 15 немцев, 18 англичан, 14 итальянцев, 18 японцев, 1 украинец и 44 американца. Расходимся?
Обычно в любой конкретной фундаментальной области (речь не про ML, конечно) в мире есть только 3-5 научных групп, работающих на прилично уровне. Кого цитировать-то?
Как у вас с ложными срабатываниями? Недавно клиент анализировал наш код в Checkmarx, вывалило под 1000 уязвимостей, из них реальных багов 3-4 и потенциальных с десяток.
Мы используем годами вылизанную libjpeg, только в ней он нашел полторы сотни ошибок.
Кстати, рекурсивную функцию, пожалуй, тоже удобнее засунуть вовнутрь.
В го каналы применяют для решения двух проблем многопоточности — явной передачи права на владение объектом и управления временем жизни потока. Ну, в теории. А так, обычное дело: берешь библиотеку, а там утечка потоков.
Если записей миллион, сколько сетевых соединений будет создано?
Или, например, если в первой статье у вас постановка задачи исследования и предложение новых подходов, а во второй — полученные результаты, то достаточно странно было бы не сослаться из второй на первую.
Новые языки не так плохи, удобство разработки быстро перевешивает накладные расходы на рантайм, особенно в разовых проектах.
Не всем надо гнать десятки мегабайт данных в секунду. Если мне нужно раз в минуту взять число из датчика CO2, выложить его на OLED экран и отдать по вайфаю, скриптовый язык подойдет оптимально. С использованием готовых модулей такой проект редко превышает десяток строк кода. Правда, в 128 килобайт флэша это всё лезет с трудом, модули приходится минифицировать. Но и с плюсами порой удивляешься, как резко растёт бинарник после всего одного дополнительного библиотечного вызова.
Заливал на Maple mini, плата вроде Bluepill, но вдвое дороже, чип там CB вместо C8.
Для экономии сейчас можно смотреть на esp8266.
PS. Глянул файлик за 17 год. Из 100000 имеют индекс самоцитирования выше 50% меньше 300 человек. Из них русских 13, потенциальных (не указана страна) ещё 6. 9 австралийцев, 12 китайцев, 15 немцев, 18 англичан, 14 итальянцев, 18 японцев, 1 украинец и 44 американца. Расходимся?
Мы используем годами вылизанную libjpeg, только в ней он нашел полторы сотни ошибок.