Daniel
это очень, очень редкая задача
Daniel
если бы у нас были такие задачи - мы бы провели чемпионат, и выяснили бы, что там лучше и где
ℝei
Ну так то вычисления на той же node js - это полюбому плохая идея
Это на основе чего был сделан такой вывод?
Алексей
даже если в другие процессы выносить
Алексей
Это на основе чего был сделан такой вывод?
ну не дробят на динамически типизированных языках числа
Evgeny
ну не дробят на динамически типизированных языках числа
как раз на них и дробят, например на python + pandas + numpy + scipy
Daniel
с чем?
Алексей
как раз на них и дробят, например на python + pandas + numpy + scipy
да, но только питон выступает в роли обвязки, сами числодробилки фактически на C/C++ написаны, либо вообще на GPU уходят
Roman
Фактически, у нас имеется два пула: один для вычислений, а второй для ввода-вывода. Динамический растет только тот, который для ввода вывода
🍁 Jaŭhien
Или фортрановский
Алексей
Да, но ты же при этом не пишешь сишный код :)
это потому что его заранее написали
Алексей
то есть питон фактически только дёргает, а вычисляет сишка
Roman
Это на основе чего был сделан такой вывод?
динамический язык в число-дробилках будет практически всегда медленее по причине своей динамики о чём говорят многочисленные бенчмарки включая всем известный https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/go-node.html. это как в 3D графике, либо быстрая статика, либо дорогая динамика (think of lighting calculation). event loop это хорошо для I/O, но вычисления блокирующие весь event loop это вообще не гут. можно конечно разбить процесс на несколько процессов или воркеров внутри процесса, но это порадит новые проблемы такие как shared state, который придётся реализовывать через какую-то БД, либо IPC что гораздо сложнее и затратнее по производительности. У каждого языка/платформы есть свои сильные и слабые стороны. JavaScript подходит далеко не везде и бэкэнд API для продакшена на нём лучше не писать если есть выбор.
🍁 Jaŭhien
И неплохо вычисляет
Алексей
и если нужно сделать что-то совсем кастомное, что не предусмотрено питоновскими либами, то тут уже питон будет больше мешать, чем помогать
Алексей
динамический язык в число-дробилках будет практически всегда медленее по причине своей динамики о чём говорят многочисленные бенчмарки включая всем известный https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/go-node.html. это как в 3D графике, либо быстрая статика, либо дорогая динамика (think of lighting calculation). event loop это хорошо для I/O, но вычисления блокирующие весь event loop это вообще не гут. можно конечно разбить процесс на несколько процессов или воркеров внутри процесса, но это порадит новые проблемы такие как shared state, который придётся реализовывать через какую-то БД, либо IPC что гораздо сложнее и затратнее по производительности. У каждого языка/платформы есть свои сильные и слабые стороны. JavaScript подходит далеко не везде и бэкэнд API для продакшена на нём лучше не писать если есть выбор.
Ну нода вообще была походу вытесненна Go в довольно узкую нишу (Server Side Rendering и сборка фронта).
Roman
Ну нода вообще была походу вытесненна Go в довольно узкую нишу (Server Side Rendering и сборка фронта).
да, в SSR нода неизбежна и там она как-раз занимает свою нужную нишу.
Roman
Не сложнее, он просто менее эффективен.
Что не сложнее? concurrency на потоках не сложнее горутин?
саша
Что не сложнее? concurrency на потоках не сложнее горутин?
Синхронный многопоточный код не сложнее асинхронного.
Roman
Синхронный многопоточный код не сложнее асинхронного.
сложнее, я там был, код лепил, по потокам текло в буфер не попадало. в асинхронном коде тебе нужно заботиться о том, чтобы не заблокировать event loop, там блокировать ни в коем случае нельзя! async/await значительно облегчает написание асинх кода, но тем не менее это не Go, где писать блокирующий код - норма.
Roman
хм?
Есть примеры когда v8/luajit быстрее go.
Roman
Есть примеры когда v8/luajit быстрее go.
может быть, но в целом производительноть и эффективность по памяти скорее за статикой чем за динамикой
Roman
Есть примеры когда v8/luajit быстрее go.
а какие собственно есть примеры?
𝗠𝗮𝗿𝘂𝗳
ребят подскажите,Вопрос по gorilla, значение ключа session.Values["authenticated"] <nil> : var store = sessions.NewCookieStore(key) глобальная переменная, когда задаем session.Values["authenticated"] = true в методе, который находится в controllers.go В другом методе, который находится в middleware.go где требуется значение session.Values["authenticated"] , выдается <nil>, если название куки прописаны одинаково вывел session из session, err := store.Get(r, "session") в middleware, мэпы пустые не пойму почему не берет значение, если все они в одном пакете
Roman
Это сложности асинхронного кода.
а какие сопоставимые сложности синхронного кода в стиле Go?
Roman
не сложнее
сильное заявление.. правда необоснованное, но это же неважно, главное мнение иметь))
Алексей
не сложнее
ну точнее чуть сложнее тем, что там надо самому пулл потоков делать
Алексей
а так всё тоже самое
Алексей
просто менее эффективно конечно же
Roman
а так всё тоже самое
абсолютно не тоже самое. я всё уже выше описал
Алексей
абсолютно не тоже самое. я всё уже выше описал
ты про асинхронный код написал
Алексей
а мы про синхронный многопоточный говорим
Roman
> сложный язык Я понимаю, когда этим словосочетанием обзывают языки Java/C/C++. Но в других языках то откуда сложность?
на такой размытый вопрос могу лишь размыто ответить: у каждого языка есть свои сложности.
Roman
а какие собственно есть примеры?
Математика. Тот же pypy умеет автовекторизацию в sse, а luajit еже более продвинут в этом плане
Roman
а мы про синхронный многопоточный говорим
я говорю про синхронный не-блокирующий код в стиле Gо, а не про синхронный в стиле C/C++, это, товарищ, вещи абсолютно разные
саша
Roman
Математика. Тот же pypy умеет автовекторизацию в sse, а luajit еже более продвинут в этом плане
я-же собственно именно об этом и говорил, что питон подходит для склеивания высокопроизводительных модулей. Где heavy-lifting делают C++ модули а питон лишь организуют между ними связь.
Алексей
я говорю про синхронный не-блокирующий код в стиле Gо, а не про синхронный в стиле C/C++, это, товарищ, вещи абсолютно разные
Синхронный многопоточный код не сложнее асинхронного. Это в принципе справедливо даже если под асинхронным понимать код Go.
Roman
Синхронный многопоточный код не сложнее асинхронного. Это в принципе справедливо даже если под асинхронным понимать код Go.
Go код не асинхронен, код синхронен, а вот его выполнение - не обязательно. В этом то и прелесть написания Go кода.
Roman
Синхронный многопоточный код не сложнее асинхронного. Это в принципе справедливо даже если под асинхронным понимать код Go.
да и вообще утверждение о том что синх. конкр. код настолько-же "прост" как async в корне неверно если учитывать shared state. mutable shared state это мать всех сложных багов и в многопоточном программирование она доминирует. в async коде нет конкурентности, там в принципе нет такого понятия как concurrency primitives, locks, data races (правда race conditions могут быть)
Roman
Коллеги, кто использует/натыкался на инсталлер (bash/py), который понимает, какие GOOS and GOARCH на клиентской системе и качает соответсвтующий бинарь из S3/etc?
Roman
я писал многопоточный C/C++: - mutable shared state. - thread'ы дорогие, с ними надо аккуратно. + очень гибкая модель и очень производительная, в умелых руках. я писал асинхронный JS: + event loop безопаснее в плане конкурентности, никаких data race'ов, мутексов и т.д. + I/O не блокирует - блокировать нельзя (!) - асинх конструкции кода без async/await это ад - логика однопоточна по умолчанию и сейчас я пишу на Go: - mutable shared state, однако каналы порой спасают + блокировать можно, никакой асинхронщины в коде + неблокирующее многопоточное исполнение по умолчанию + горутины очень дешёвые, любое конкр. задание можно запустить в своём "потоке" и для web'а (и возможно даже application development'а) гошная модель конкурентности подходит лучше всего. Она достаточно мощная и при этом более простая.
Artem
кто чем визуализирует zipkin dependencies? встроенного уже не хватает
Daniel
подскажите?) ANY?
https://stackoverflow.com/questions/20271123/how-to-execute-an-in-lookup-in-sql-using-golang, второй ответ (который с It looks like you may be using the pq driver. начинается)
Daniel
коллеги, а о чем вы трете?
Roman
коллеги, а о чем вы трете?
поясняю людям сильные и слабые стороны Go)
Roman
ты наш герой?
вам решать, не мне))
Алексей
я писал многопоточный C/C++: - mutable shared state. - thread'ы дорогие, с ними надо аккуратно. + очень гибкая модель и очень производительная, в умелых руках. я писал асинхронный JS: + event loop безопаснее в плане конкурентности, никаких data race'ов, мутексов и т.д. + I/O не блокирует - блокировать нельзя (!) - асинх конструкции кода без async/await это ад - логика однопоточна по умолчанию и сейчас я пишу на Go: - mutable shared state, однако каналы порой спасают + блокировать можно, никакой асинхронщины в коде + неблокирующее многопоточное исполнение по умолчанию + горутины очень дешёвые, любое конкр. задание можно запустить в своём "потоке" и для web'а (и возможно даже application development'а) гошная модель конкурентности подходит лучше всего. Она достаточно мощная и при этом более простая.
mutable shared state и в го можно спокойно организовать асинхронный JS однопоточен, но это скорее исключение из правил, чем правило, ибо есть языки, которые и в async/await могут и в потоки (Python, C#, C++20) Так что на самом деле основная киллерфича Go - это лёгкие горутины и отсутствие необходимости явно работать с тред пуллом.
Daniel
мы же все понимаем, что для производительности более-менее все равно, что там за инструкции. важно, насколько часто мы инвалидируем кеш проца, и насколько сильно огорчаем предсказателя
Roman
коллеги, а о чем вы трете?
У меня простой поинт: пока в го нет автовекторизации любой язык что её умеет будет быстрее
Roman
В хаскеле получше таки модель.
хорошо иметь мнение, но ещё лучше иметь это мнение обосновать)
Daniel
быстрее в чем?
Roman
быстрее в чем?
В математике
Daniel
возможно
Daniel
можно взять конкретную задачу, и померять
саша
хорошо иметь мнение, но ещё лучше иметь это мнение обосновать)
Всё то же самое, но STM, вместо мьютексов и каналов.
Evgeny
В многопоточном приложении главное свести взаимодействие между потоками к минимуму, если это сделано, то все равно, на чем построено взаимодействие между ними, на каналах, на мьютексах или на IPC.
🍁 Jaŭhien
Такой вопрос, какой идешкой пользуетесь?
Roman
Всё то же самое, но STM, вместо мьютексов и каналов.
shared mutable state без мьютексов говорите? что-то я вам не верю, коллега