
Alexandr
10.06.2018
22:18:16

Oleg
10.06.2018
22:28:50
вопрос по vgo, вот есть проект, у него есть файлик go.mod со всеми зависимостями, каким образом я могу загрузить все зависимости и запустить проект?

Daniel
11.06.2018
02:18:41
ты тут самый адекватный, вот и просим поучаствовать, как арбитра. а, возможно, у тебя еще и идея интересная есть
кто просил идею для компетишена?
смотрите: есть такой проект https://github.com/coturn/coturn
это STUN/TURN сервер для WebRTC
гошной имплементации я не нашел, а она была бы не лишней - возможность встраивать в свой сервер, возможность расширять, например, метриками, и все вот это вот
у меня вот на руках сейчас проект, в котором, возможно, придется использовать WebRTC p2p и, соответственно, STUN/TURN
код этого сервера, кстати, хорошая иллюстрация к идее "препроцессор зло". реально нечитаем из-за #if !defined

Google

Daniel
11.06.2018
02:40:35
голый C...
а вот это - иллюстрация к тому, почему такие вещи редко пишут на C (и тут бы не надо, на самом деле)
$cloc ./coturn/src/server/ ./coturn/src/apps/relay/
43 text files.
43 unique files.
0 files ignored.
github.com/AlDanial/cloc v 1.76 T=1.04 s (41.4 files/s, 33639.8 lines/s)
------------------------------------------
Language files blank comment code
------------------------------------------
C 20 4811 1586 24401
C/C++ Header 23 724 1339 2041
------------------------------------------
SUM: 43 5535 2925 26442
------------------------------------------
24 тысячи строк кода.
24
вдумайтесь, что можно запилить, написав 24 тысячи строк на go

Andrey
11.06.2018
04:39:24

Pawel
11.06.2018
06:10:26
Почему в Го такие дорогостоящие системные вызовы?

Alexander
11.06.2018
06:10:54
почем?

Michael
11.06.2018
06:18:04

Pawel
11.06.2018
06:18:36
в питоне, в C#

Michael
11.06.2018
06:19:02
???

Alexander μήδομαι
11.06.2018
06:56:06
Какие языковые конструкции в Go больше всего экономят бойлерплейт?
Мне в голову сразу идёт сборщик мусора, но в отдельных приложениях это неприменимо. В официальной доке о профилировании Go есть пример, когда для существенного улучшения производительности и потребления памяти переходят на ручное управление через предаллокацию и кэшированное переиспользование аллоцированных объектов.

Google

Alexander μήδομαι
11.06.2018
07:01:30
Каналы и горутины конечно много усилий экономят) Но так ли уж много нужно их в типичном сервере?
Наверное, гошные интерфейсы могут сэкономить много тривиального кода, но к сожалению, я пока видел мало примеров.
В общем, если у кого-то есть размышления и примеры на тему "почему в Go код значительно компактнее чем в C/C++", было бы интересно узнать.

Andrey
11.06.2018
07:12:06
Го можно сравнивать с Java... При чем здесь c++

Антон
11.06.2018
07:19:12

Alexander μήδομαι
11.06.2018
07:20:50
Го это не системный язык. Ядро ты на не напишешь.
Почему-то сами создатели Go в официальной документации охотно сравнивают своё детище с системными языками.
"— What is the purpose of the project?
— No major systems language has emerged in over a decade, but... blah-blah... We believe it's worth trying again with a new language, a concurrent garbage-collected language with fast compilation."
https://golang.org/doc/faq#What_is_the_purpose_of_the_project
"— Why are you creating a new language?
— Go was born out of frustration with existing languages and environments for systems programming..."
https://golang.org/doc/faq#creating_a_new_language

Kaspar
11.06.2018
07:31:26

Andrey
11.06.2018
07:39:39


Alexander μήδομαι
11.06.2018
07:54:05
Сравнивать они могут с чем угодно, факт в том, что из-за gc , применение его ограничено. Чего не скажешь например о rust. Но вообще, я о том, что сравнивать его более корректно с Java.
ОК, с создателями Гохи разобрались: они ничего не понимают в системном программировании и делают неправильные сравнения. Их в этом чате нет и возразить нам они не смогут :)
Но @onokonem здесь есть и он, наверное, сможет нам рассказать, почему он сравнивает Go и C.
На мой взгляд влияние сборщика мусора можно контролировать, если использовать предаллокацию. В разработке игр это распространённая практика. Чтобы не вылететь в середине игры по OufOfMemory, чтобы не пойти на сборку мусора на полминутки, разработчики заранее определяют, что будет не более N объектов типа T и управляют их выделением вручную через слайс фиксированного размера. В системном программировании есть похожие soft/hard limits на количество дексрипторов, но я недостаточно компетентен для того чтобы делать твёрдые заявления об устройстве ядер.


Nick
11.06.2018
07:56:21

Kaspar
11.06.2018
07:57:41
Ага давайте сравним стопы gc в джаве и го
И график изменения пауз за пару лет в го и за 10 в джаве

Nick
11.06.2018
07:58:49
В джаве не один gc


Andrey
11.06.2018
08:11:15
ОК, с создателями Гохи разобрались: они ничего не понимают в системном программировании и делают неправильные сравнения. Их в этом чате нет и возразить нам они не смогут :)
Но @onokonem здесь есть и он, наверное, сможет нам рассказать, почему он сравнивает Go и C.
На мой взгляд влияние сборщика мусора можно контролировать, если использовать предаллокацию. В разработке игр это распространённая практика. Чтобы не вылететь в середине игры по OufOfMemory, чтобы не пойти на сборку мусора на полминутки, разработчики заранее определяют, что будет не более N объектов типа T и управляют их выделением вручную через слайс фиксированного размера. В системном программировании есть похожие soft/hard limits на количество дексрипторов, но я недостаточно компетентен для того чтобы делать твёрдые заявления об устройстве ядер.
Мы спорить конечно можем, но зачем!? В Яве тоже можно делать биндинги на нативные функций, у управлять памятью через offHeap. Но системным язык от этого не станет. Да это ведь и не проблема. Да, го ближе и легче при работе с нативщиной, и ограничения в языке есть в пользу большей совместимости с С... Ну и ладно. Но в остальном он на Яву похож больше. Яву тоже делали с оглядкой на С.
Мне кажется маловероятным, что кто пишет драйвера на го или ядерные модули...
Если это вообще возможно


Alexander μήδομαι
11.06.2018
08:13:39
Chrome можно написать на Go.

Google

Andrey
11.06.2018
08:16:06

Pawel
11.06.2018
08:21:34

Vladimir
11.06.2018
08:22:33

Pawel
11.06.2018
08:22:57
гугли. всё доступно

Vladimir
11.06.2018
08:23:13
Поведутся те кто не знает как Гц в го работает
Маладчина

Alexandr
11.06.2018
08:23:46

Andrey
11.06.2018
08:24:47
Или наоборот?! :)
Вообще, если смотреть на большие компании, то они любят задротство на собеседованиях...

Alexandr
11.06.2018
08:25:34

Alexandr
11.06.2018
08:26:12
я решил десятка два задач, всей этой матоты в голове поприбавилось, теперь вот думаю, как от неё избавиться.

Alexander μήδομαι
11.06.2018
08:32:01

Vladimir
11.06.2018
08:32:33
А как он работает? :)
Я на это обычно ссылку на этот доклад даю:
https://www.usenix.org/conference/srecon17asia/program/presentation/sibiryov

Alexander μήδομαι
11.06.2018
08:33:53

Michael
11.06.2018
08:35:06
по поводу го и не системный - https://github.com/achilleasa/gopher-os

Google

Alexander
11.06.2018
10:11:02

Tigran
11.06.2018
10:12:25
у меня го в простой программке аллоцирует 500 ГБ виртуальной памяти, это норма?

Alexander
11.06.2018
10:12:41
норма.
это же линукс ?

Tigran
11.06.2018
10:14:56
мак ось
где можно почитать поподробнее, что и зачем он при этом делает?

Vasily Romanov
11.06.2018
10:17:58

Артем
11.06.2018
10:23:08
и в этой статье ответа нет

Admin
ERROR: S client not available

Артем
11.06.2018
10:23:18
там только базовые вещи "а что такое память"

Michael
11.06.2018
10:45:17
красивые картинки погц гоу https://twitter.com/brianhatfield/status/804355831080751104
100гб видимо не проблема, под линукс людям и 512 мало, в 1.11 должны снять это ограничение

Alexander μήδομαι
11.06.2018
11:03:14
Не похоже на 100 мкс :)
Хотя и 1 мс это вполне по-божески.

Vladimir
11.06.2018
11:07:06
И перестает например справляться

Alexander
11.06.2018
11:11:58

Vladimir
11.06.2018
11:12:15
Говорят и верят в это
лул. и на 100 гигах ?
Паузы зависят от колличества объектов по скорости. Ну и расплатой за скорость в го то, что память дольше висит в непонятном состоянии.

Alexander μήδομαι
11.06.2018
11:13:15
Примеры нужны.
Большие объёмы мусора – сколько ГБ, сколько часов рантайма. Тормозит – это сколько в ms.

Vladimir
11.06.2018
11:13:33
Итого конечно да, паузы короткие

Google

Vladimir
11.06.2018
11:14:36
Но только если приложение создаёт много мелких объектов, к тебе придет оом, хотя по профилировщику никогда больше 1гб не занято, просто ещё 90 в Лимбо лежат и ждут когда их почистят

Alexander μήδομαι
11.06.2018
11:15:59
В продакшене такое бывает?
Если swap выключить, то что будет после заполнения RAM? :)

Petr
11.06.2018
11:16:59
ОООМ же

Alexander μήδομαι
11.06.2018
11:18:09
Т.е. чистить своё лимбо не будет, просто упадёт?
Какой интересный GC :)
Системный язык! :)

Pawel
11.06.2018
11:24:02


Kirill
11.06.2018
11:56:19
кто просил идею для компетишена?
смотрите: есть такой проект https://github.com/coturn/coturn
это STUN/TURN сервер для WebRTC
гошной имплементации я не нашел, а она была бы не лишней - возможность встраивать в свой сервер, возможность расширять, например, метриками, и все вот это вот
у меня вот на руках сейчас проект, в котором, возможно, придется использовать WebRTC p2p и, соответственно, STUN/TURN
У меня знакомый делал гошную реализацию
@mersinvald а ты пилил уже тот веб-сервис?
кто просил идею для компетишена?
смотрите: есть такой проект https://github.com/coturn/coturn
это STUN/TURN сервер для WebRTC
гошной имплементации я не нашел, а она была бы не лишней - возможность встраивать в свой сервер, возможность расширять, например, метриками, и все вот это вот
у меня вот на руках сейчас проект, в котором, возможно, придется использовать WebRTC p2p и, соответственно, STUN/TURN
https://github.com/gortc/stun

Daniel
11.06.2018
12:03:41

Kirill
11.06.2018
12:06:11

Alexander
11.06.2018
12:41:58
В общем, "вроде" разобрался с сервером, снял hprof
Showing top 10 nodes out of 76
flat flat% sum% cum cum%
15.92s 62.04% 62.04% 15.93s 62.08% syscall.Syscall
2.88s 11.22% 73.27% 2.88s 11.22% runtime.kevent
1.81s 7.05% 80.32% 1.83s 7.13% runtime.freedefer
1.37s 5.34% 85.66% 1.37s 5.34% runtime.mach_semaphore_wait
0.72s 2.81% 88.46% 0.72s 2.81% runtime.mach_semaphore_signal
0.61s 2.38% 90.84% 0.61s 2.38% runtime.usleep
0.48s 1.87% 92.71% 0.48s 1.87% internal/poll.convertErr
0.27s 1.05% 93.76% 3.16s 12.31% runtime.netpoll
0.22s 0.86% 94.62% 0.22s 0.86% runtime.memclrNoHeapPointers
0.18s 0.7% 95.32% 0.58s 2.26% runtime.mallocgc
весь CPU заняли Read/Write в сокет
теперь тогда другой вопрос, как-то тогда работаю супер-можные сетевыесервера, тот же rabbitmq, там же тоже очень много сетевой активности
сотни паблишеров и консумеров


Fastumkruk ✅
11.06.2018
13:27:05
А как вставить переменную в ссылку POST запроса? Например:
site.ru/par1?=peremennay1
\"peremennay1\" такое не работает

Kaspar
11.06.2018
13:41:58
это GET

Fastumkruk ✅
11.06.2018
13:46:29
это GET
А в POST запрос добавлять например так? req.Form.Add("key", "value") ???

Andrey
11.06.2018
13:49:08
в теле запроса, дальше иди гугли. Это вообще то по go чат.