Size: a a a

2020 April 06

а

а кто это in Go-go!
Dmitry 🦆
Так, waitgroup мне нужен
а вот каналы не нужны, выходит, буду просто в map накидывать результаты
только синхронизировать не забудьте
источник

а

а кто это in Go-go!
для этого есть sync.Map
источник

а

а кто это in Go-go!
но можно и обычный map + mutex
источник

D🦆

Dmitry 🦆 in Go-go!
Спасибо, думал через мьютекс
источник

D🦆

Dmitry 🦆 in Go-go!
ага
источник

DE

Dmitry Ermakovich 🐍 in Go-go!
Dmitry 🦆
Окей, для простоты эксперимента

На входе [1,2,3,4,5,6,7,8,9,10]
Горутина умножает на два.
Надо распараллелить и собрать результат
в голову за неименением опыта в Go приходит вариант из Node.js:
resultArr = await Promise.all(arr.map(...)), не знаю как здесь это сделать лучше
источник

DP

Daniel Podolsky in Go-go!
Dmitry Ermakovich 🐍
в голову за неименением опыта в Go приходит вариант из Node.js:
resultArr = await Promise.all(arr.map(...)), не знаю как здесь это сделать лучше
но это же не распараллелит ничего
источник

D🦆

Dmitry 🦆 in Go-go!
А тут свои особенности: порядок не гарантирован, собственно поэтому придется через мапу изнутри впихивать
источник

D🦆

Dmitry 🦆 in Go-go!
я такой подход с корутинами никогда раньше не применял, пока что кажется ребусом
источник

DP

Daniel Podolsky in Go-go!
из общих соображений - делаете канал, запускаете расчеты в горутинах, передав им канал. ждете, пока по каналу приедут результаты, профит
источник

DE

Dmitry Ermakovich 🐍 in Go-go!
Daniel Podolsky
но это же не распараллелит ничего
внутри arr.map вставляем async функцию, итого над каждым элементом массива функция выполняется асихронно и после завершения результаты склеиваются в resultArr
источник

E

Edgar in Go-go!
Dmitry Ermakovich 🐍
в голову за неименением опыта в Go приходит вариант из Node.js:
resultArr = await Promise.all(arr.map(...)), не знаю как здесь это сделать лучше
Так, запуск N горутин тоже ведь по факту не поможет в данной задаче, ведь, если мне не изменяет память, горутина уходит в ожидание в момент io, то есть в этой задаче они будут просто поочередно выполняться же
источник

DP

Daniel Podolsky in Go-go!
Edgar
Так, запуск N горутин тоже ведь по факту не поможет в данной задаче, ведь, если мне не изменяет память, горутина уходит в ожидание в момент io, то есть в этой задаче они будут просто поочередно выполняться же
в отличие от ноды - go утилизирует несколько ядер, если ему не мешать
источник

DP

Daniel Podolsky in Go-go!
Dmitry Ermakovich 🐍
внутри arr.map вставляем async функцию, итого над каждым элементом массива функция выполняется асихронно и после завершения результаты склеиваются в resultArr
параллельности не будет все равно
источник

ВГ

Владимир Гришин in Go-go!
Dmitry 🦆
Так, waitgroup мне нужен
а вот каналы не нужны, выходит, буду просто в map накидывать результаты
в целом можно и канал поставить, и забрать из него в цикле данные
источник

D🦆

Dmitry 🦆 in Go-go!
Как в sync.Map типы задаются для ключа и значения?
Что-то в референсе не найду.
источник

DP

Daniel Podolsky in Go-go!
никак
источник

D🦆

Dmitry 🦆 in Go-go!
боксинг/анбоксинг? 😐
источник

RS

Roman Sharkov in Go-go!
@dmitry_test https://play.golang.org/p/fzaA873UyZZ

что-то в этом роде можно запилить, будет минимально эффективнее (разница будет незначительная) канала

P.S. это надо проверить race detector’ом
источник

D🦆

Dmitry 🦆 in Go-go!
Внешний скоп тоже можно брать, не знал
источник