@gogolang

Страница 1087 из 1630
Daniel
21.05.2018
09:26:20
я не сильно компетентен в хайлоаде, но мне кажется, что если каналы стали боттлнеком, то нужно пересмотреть используемые инструменты и подход.
я знаю один способ наткнуться на тормоз каналов - приложение ничего не делает само, а только пересовывает данные из горутины в горутину. например - это какая-то in-memory cache либа. как только мы начинаем делать что-то полезное - полезное начинает занимать на порядки больше времени

Google
The
21.05.2018
09:30:24
они больно бьют
каким образом больно бьют?

Sergey
21.05.2018
09:31:17
кусаются, наверное ну или током бьют

Mike
21.05.2018
09:32:15
Nik
21.05.2018
09:34:11
В го есть атомики?

Марина
21.05.2018
09:34:47
#вакансия #go #python #ruby #MachineLearning #ML #офис #fulltime Всем привет! ? Кто давно хотел перейти в разработку на Go? ? Сейчас именно тот момент! Готовы знакомиться с опытными разработчиками, имеющими разный бекграунд (Python/Ruby/Java) и готовых переходить на Go. О компании: стартап, этап активного формирования команды. О проекте: разработка платформы, позволяющей автоматически создавать решения на базе машинного обучения для бизнеса. Основные задачи: - Создание инфраструктурных решений - Выстраивание архитектуры приложений - Разработка и поддержка микросервисов г. Москва, м. Охотный ряд ЗП: 150 - 250к на руки Фултайм в офисе (Возможность иногда работать удаленно). C подробностями можно ознакомиться здесь: https://vacancy.newhr.ru/golang/4 С радостью отвечу на все вопросы по почте: marina@new.hr ? Вакансия представлена агентством https://newhr.ru/ Спасибо!

Roman
21.05.2018
09:34:56
каким образом больно бьют?
https://fgiesen.wordpress.com/2014/08/18/atomics-and-contention/

Daniel
21.05.2018
09:39:46
многабукв. что там в двух словах? сброс кеша невовремя?

Roman
21.05.2018
09:40:00
Это как?
процессоры видят память через кеш. использование атомиков приводит к инвалидации кеш-линии конкретного ядра + в дело включаются алгоритмы когерентности кешей(нам надо эту кеш-линию сбросить у соседних ядер на этом же кристалле, а если сокетов больше одного - то еще и в соседний cpu ннадо)

Daniel
21.05.2018
09:40:27
сброс кеша невовремя...

Roman
21.05.2018
09:40:30
многабукв. что там в двух словах? сброс кеша невовремя?
инвалидация линейки кеша везде. это дорого. очень.

The
21.05.2018
09:40:46
альтернатив то нет. или есть?

Roman
21.05.2018
09:40:46
ну и при contention атомики становятся еще более дорогими

для понимания ужаса можно посмотреть на http://htor.inf.ethz.ch/publications/img/atomic-bench.pdf

Google
Daniel
21.05.2018
09:41:34
но вариантов-то нет, кроме как не пользовать шареную память вообще

Roman
21.05.2018
09:42:20
альтернатив то нет. или есть?
нет, да. точнее, атомики плохи при contention. когда несколько потоков используя атомики модифицируют одну и ту же переменную

The
21.05.2018
09:43:23
@pragus спасибо за статью.

Mike
21.05.2018
09:44:00
зависит от сценария использования.
Инкремент из несколькох потоков. Внутри мутекса все равно атомик

Sergey
21.05.2018
09:44:30
ну и при contention атомики становятся еще более дорогими
дада, дороже чем мьютексы (которые на пару с каналами сделаны поверх атомиков) или каналы + WaitGroup, тоже норм тема

Daniel
21.05.2018
09:45:37
и тут мы возвращаемся к вопросу о производительности. запросто на современном проце код с копированием памяти может оказаться быстрее, чем код с передачей указателя и мутексом. если все сойдется так, что копирование произойдет в кеше

Roman
21.05.2018
09:45:54
Инкремент из несколькох потоков. Внутри мутекса все равно атомик
да блин, есть же разные варианты реализации мьютексов

вообще, самый правильный вариант - писать так, чтобы взаимодействия между горутинами/тредами было минимум.

и не шарить вообще никаких данных

Daniel
21.05.2018
09:47:17
данные обычно мутировать не надо.

Roman
21.05.2018
09:47:21
если чтения больше чем модификации, оно почти lockless )

Sergey
21.05.2018
09:47:30
и не шарить вообще никаких данных
"не шарить" в смысле не иметь одновременного доступа к одним и тем же данным? значит нужно передавать данные по каналам? но каналы же медленные?

Mike
21.05.2018
09:47:33
вообще, самый правильный вариант - писать так, чтобы взаимодействия между горутинами/тредами было минимум.
ЕМНИП, в го нет удобных инструментов для организации параллельных вычислений без блокировок совсем. Вроде параллельных итераторов

Daniel
21.05.2018
09:49:25
"не шарить" в смысле не иметь одновременного доступа к одним и тем же данным? значит нужно передавать данные по каналам? но каналы же медленные?
еще когда я это написал, я подумал, что будет так. канал медленный по сравнению с мутексом и атомиком. потому, что в нем 3 мутекса, кажется. но! вы об этом никогда не узнаете!!!

Mike
21.05.2018
09:49:51
если чтения больше чем модификации, оно почти lockless )
Я его для эльбруса реализовывал. Там таки спинлок и атомик. Возможно на платформах где есть барьеры памяти оно поэффективнее)

Google
Daniel
21.05.2018
09:52:28
конечно. вы и про атомик узнаете только если напишете херню - будете модифицировать счетчик часто и из разных тредов

Mike
21.05.2018
09:54:53
Roman
21.05.2018
09:55:09
Даже не один х)
Вы из мцст?

Mike
21.05.2018
09:55:13
Ага

Сергей
21.05.2018
09:57:07
про встраивание мьютекса - не вижу проблем с этим. ну доступны локи снаружи пакета, не критично, иногда даже полезно бывает, т.к. мапа не приватная
ну как угодно ? Просто ты предоставляешь лишний интерфейс к компоненту ? То есть такого рода компонент должен быть инкапсулирован, за атомарность операций должен отвечать непосредственно публичный метод. По поводу тестов, тестировать нужно все ? Даже простые функции, пусть она просто складывает 2 + 2.

The
21.05.2018
09:58:56
По поводу тестов, тестировать нужно все ? Даже простые функции, пусть она просто складывает 2 + 2. С этим не соглашусь

Mike
21.05.2018
09:59:48
Человек, возможно, из мира динамической типизиции пришел, где тестировать нужно всё, чтобы не огребать от проблем с типами

Jentry
21.05.2018
10:10:25
Тестировать нужно, но не обязательно писать тесты на такие функции, достаточно, чтобы в покрытие попадала другими более высокоуровневыми тестами

The
21.05.2018
10:11:08
ну обычно тестят внешний API и ещё какие-то сложные функции.

я ещё пишу тест перед рефакторингом

The
21.05.2018
10:11:29
если даже функция тривиальная

Jentry
21.05.2018
10:12:39
странно, что перед рефакторингом тривиальные функции, они же как раз могут измениться без изменения внешнего интерфейса

The
21.05.2018
10:13:41
ну если апи тестится ок, и все ожидаемо, то изменив какую-то тривиальную функцию (две, три) можно поломать апи. но потом сложнее вычислить что именно поломало апи.

но я не бог тестов

просто на практике так привык, и мне это кажется удобным

Roman
21.05.2018
10:21:15
Ага
А гошечка у вас работает?

Mike
21.05.2018
10:21:25
tsov
21.05.2018
10:40:38
есть у нас тут кто с ораклом работал на го?

Google
tsov
21.05.2018
10:41:07
не могу понять как для oci8 правильный url к базе составить

mattn/go-oci8

Алексей
21.05.2018
10:41:52
добрый день! подскажите как перекрасить картинку png с зеленого в красный !пописиксельно 255 значений!

stixlink
21.05.2018
10:51:07
Всем привет! Я правильно понимаю, что использовать поинтер на мап это бред, т.к он у нас ссылочный? или это где то применимо?

The
21.05.2018
10:52:39
слайсы, мапы и каналы ссылочные типы

т.е., не нужно делать *map

stixlink
21.05.2018
10:53:08
ок, спасибо)

The
21.05.2018
10:54:15
можете вот это почитать ещё, для справки: https://dave.cheney.net/2017/04/29/there-is-no-pass-by-reference-in-go

Nikita
21.05.2018
10:59:52
а возможно вообще в GoLang объявлять глобальные переменные и вызывать что-то глобально ?

ну к бд подключиться, допустим

Admin
ERROR: S client not available

Artem
21.05.2018
11:01:12
Можно, но не нужно

Nikita
21.05.2018
11:01:26
а как в идеале делать надо ? я второй день в Go

The
21.05.2018
11:01:51
глобальные - возможно, но доступ через название пакета

доступ к переменным пакета main из других пакетов нет

Nikita
21.05.2018
11:02:10
то есть вынести подключение к бд в отдельный package ?

The
21.05.2018
11:02:18
да, типо того

Nikita
21.05.2018
11:02:40
окс, спасибо

Daniel
21.05.2018
11:12:29
но лучше все же явно передавать хендлер базы куда надо. проще понимать ваш код будет

Nikita
21.05.2018
11:16:12
can't load package: package .: found packages database (database.go) and main (main.go) in /Users/A2/go_test чо так жестка ):

Google
Sergey
21.05.2018
11:18:22
локальные пути использовать можно, но не нужно, т.к. ничего не будет работать

Denis
21.05.2018
11:18:54
Nikita
21.05.2018
11:21:28
лол а чо так жестко ну ладно а main должен быть в директории отдельной тоже ?

заработало, ура

неа

не заработало

Sergey
21.05.2018
11:23:00
лол а чо так жестко ну ладно а main должен быть в директории отдельной тоже ?
main обычно в верхней директории (если у тебя один бинарник на выходе)

Nikita
21.05.2018
11:23:04
а экспортить как-то надо как в ноде ?

Sergey
21.05.2018
11:23:38
Nikita
21.05.2018
11:25:09


в main ну или в других пакетах

вообще непривычно после ноды

Sergey
21.05.2018
11:26:02
с большой буквы — func Database()

Nikita
21.05.2018
11:27:01
ты лучший

Sergey
21.05.2018
11:27:26
но вообще я не уверен, что Database хорошее название для функции, оно не оторажает никакого действия

some_random_anonymous
21.05.2018
11:27:30
ты лучший
Почитай уже туториалы наконец

Узнаешь прям ещё больше

Alexander
21.05.2018
11:28:44
но вообще я не уверен, что Database хорошее название для функции, оно не оторажает никакого действия
Так и функция ничего не делает, только открывает и закрывает соединение )

Nikita
21.05.2018
11:29:17
Почитай уже туториалы наконец
блин, а можешь посоветовать что-то годное из туториалов ? как раз по организации я и не нашел

Страница 1087 из 1630