Re[12]: Go язык прёт?
От: Evgeny.Panasyuk Россия  
Дата: 17.10.18 07:24
Оценка:
Здравствуйте, Cyberax, Вы писали:

EP>>Плюс, даже без этой возможности — не забываем про резервирование адресного пространства/overcommit — по сути то же расширение по требованию.

C>Игры с защитой памяти — достаточно дорогое и сомнительное удовольствие. На 10 тысячах потоков семафор mmap/mprotect в ядре будет раскалён до температуры термоядерного синтеза.

Память часто можно выделять заранее, защита памяти — это больше для успокоения на очень unhappy path.

C>>>Так что на Go легко можно запустить пару десятков тысяч горутин. А на С++ в boost::coroutine только стеки потоков съедят пол-оперативки

EP>>На Boost.Coroutine сотни тысяч запускаются без проблем
Автор: Evgeny.Panasyuk
Дата: 29.11.13
, причём на древнем ноутбуке, и это без segmented stack

C>Если взять более реалистичный размер в 64Кб, то получим 6.5Гб только на стеки при 100000 потоков. Нет, оно будет работать, с этим никто не спорит.

А на десятках тысяч о которых ты говорил выше — будет несколько гигабайт, ну и?

C>Так что горутина может начать со стеком всего в килобайт.


Если память это настолько проблема, а корутин действительно много, то нужно брать stackless корутины — там минимальный размер одной корутины несколько байт — запускай хоть миллиарды
Re[13]: Go язык прёт?
От: Cyberax Марс  
Дата: 17.10.18 07:32
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

C>>Игры с защитой памяти — достаточно дорогое и сомнительное удовольствие. На 10 тысячах потоков семафор mmap/mprotect в ядре будет раскалён до температуры термоядерного синтеза.

EP>Память часто можно выделять заранее, защита памяти — это больше для успокоения на очень unhappy path.
Ээээ....

Если у нас защита памяти используется для минимизации стеков, то тогда промахи по памяти будут частым явлением.

C>>Если взять более реалистичный размер в 64Кб, то получим 6.5Гб только на стеки при 100000 потоков. Нет, оно будет работать, с этим никто не спорит.

EP>А на десятках тысяч о которых ты говорил выше — будет несколько гигабайт, ну и?
Это как бы немало.

C>>Так что горутина может начать со стеком всего в килобайт.

EP>Если память это настолько проблема, а корутин действительно много, то нужно брать stackless корутины — там минимальный размер одной корутины несколько байт — запускай хоть миллиарды
Но они требуют специального стиля написания.
Sapienti sat!
Re[14]: Go язык прёт?
От: reversecode google
Дата: 17.10.18 07:50
Оценка:
ну не сетевые приложения, давайте не будем лукавить

язык дерьмо, ничего дальше написания парсинга и отправки хттп запрос ответов он не годится
этакая замена nginx для кастомизации, да и к тому уже луа прикрутили
язык для бедных с профитом для гугла закрыть недостаток специалистов в своих веб сервисах

порог вхождения в язык ниже плинтуса, что это значит ?
давайте прикинем по аналогии что будет если
каждый сможет стать медиком или президентом или министром всего за недельные курсы
ООоООООооо в стране появится много медиков, президентов и министров.... плохо ли это ??
текущие президент министры и медики должны бояться конкуренции ??
Re[14]: Go язык прёт?
От: reversecode google
Дата: 17.10.18 07:55
Оценка:
https://golang.org/src/runtime/proc.go#L26
// Design doc at https://golang.org/s/go11sched
вся архитектура и ее органичения
Re[14]: Go язык прёт?
От: Evgeny.Panasyuk Россия  
Дата: 17.10.18 07:59
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>>Игры с защитой памяти — достаточно дорогое и сомнительное удовольствие. На 10 тысячах потоков семафор mmap/mprotect в ядре будет раскалён до температуры термоядерного синтеза.

EP>>Память часто можно выделять заранее, защита памяти — это больше для успокоения на очень unhappy path.
C>Ээээ....
C>Если у нас защита памяти используется для минимизации стеков, то тогда промахи по памяти будут частым явлением.

Совсем не обязательно частым. Скажем мы уменьшили изначальный стэк до такого размера что в одной из сотни тысяч корутин его не хватит. При отсутствии защиты мы и этого себе позволить не можем, ибо превышение лимита приведёт к расстрелу памяти, и поэтому приходится перезакладываться.
При наличии же защиты расстрела не будет, а цена unhappy path приемлема

C>>>Если взять более реалистичный размер в 64Кб, то получим 6.5Гб только на стеки при 100000 потоков. Нет, оно будет работать, с этим никто не спорит.

EP>>А на десятках тысяч о которых ты говорил выше — будет несколько гигабайт, ну и?
C>Это как бы немало.

Если у нас таки "реалистичный размер в 64Кб", то в варианте на Go сколько будет?

C>>>Так что горутина может начать со стеком всего в килобайт.

EP>>Если память это настолько проблема, а корутин действительно много, то нужно брать stackless корутины — там минимальный размер одной корутины несколько байт — запускай хоть миллиарды
C>Но они требуют специального стиля написания.

Благодаря макросам этот стиль структурно не сильно отличается от stackful корутин — это то что было уже давно.
А сейчас, в нескольких мейнстрим компиляторах уже реализованны предложения stackless, причём уже несколько версий назад.
Re[15]: Go язык прёт?
От: C0x  
Дата: 17.10.18 08:21
Оценка:
Здравствуйте, reversecode, Вы писали:


R>ну не сетевые приложения, давайте не будем лукавить


UDP, TCP без проблем прямо сейчас создаю на коленке. И работает.
Не я не против и могу вполне на Си такое колбасить, но это потребует больше времени и возни с либами (я кроссплатформенное решение делаю), ковыряния скорее всего в тонкостях работы разных либ.

R>язык дерьмо, ничего дальше написания парсинга и отправки хттп запрос ответов он не годится


Это типа "шуруповерт на батарейках дерьмо, ничего кроме закручивания маленьких шурупов в ДСП он не умеет"?

R>давайте прикинем по аналогии что будет если

R>каждый сможет стать медиком или президентом или министром всего за недельные курсы

Не нужно ничего сочинять и прикидывать, Не сможет каждый стать медиком! Так же не сможет каждый стать хорошим программистом.
И то что есть понятие "Индус" в программировании так это уже лет 20 как, еще со времён Интернет Бума в конце 90х. И на мой взгляд Го тут вообще капля в море.
Re[10]: Go язык прёт?
От: Evgeny.Panasyuk Россия  
Дата: 17.10.18 08:22
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Потому, что все эти библиотеки сложно использовать — кроме горутин ещё нужны каналы и полноценный планировщик. Это всё вполне возможно на С++, хотя каналы будет немного сложно сделать без полноценного GC.


Планировщик, каналы и прочая обвязка есть в Boost.Fiber.
То есть в Boost есть три библиотеки на тему stackful, начиная от низкого к более высокому уровню: Boost.Context, Boost.Coroutine, Boost.Fiber.
Re[16]: Go язык прёт?
От: reversecode google
Дата: 17.10.18 08:38
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Здравствуйте, reversecode, Вы писали:



R>>ну не сетевые приложения, давайте не будем лукавить


C0x>UDP, TCP без проблем прямо сейчас создаю на коленке. И работает.

C0x>Не я не против и могу вполне на Си такое колбасить, но это потребует больше времени и возни с либами (я кроссплатформенное решение делаю), ковыряния скорее всего в тонкостях работы разных либ.

R>>язык дерьмо, ничего дальше написания парсинга и отправки хттп запрос ответов он не годится


C0x>Это типа "шуруповерт на батарейках дерьмо, ничего кроме закручивания маленьких шурупов в ДСП он не умеет"?


объединим два вопроса,
значит гоу по вашему хорош для сетевого программирования
давайте определим где у вас в современном программировании используется сеть ?
webservice
gamedev
voip
iptv
blockchain

добавляйте, может я что то упустил ?
и в какой из этих сфер гоу уже более 50% ?

почти нигде кроме как на webservice гоу нет
ну еще в блокчаин пытаются его пихать

R>>давайте прикинем по аналогии что будет если

R>>каждый сможет стать медиком или президентом или министром всего за недельные курсы

C0x>Не нужно ничего сочинять и прикидывать, Не сможет каждый стать медиком! Так же не сможет каждый стать хорошим программистом.

C0x>И то что есть понятие "Индус" в программировании так это уже лет 20 как, еще со времён Интернет Бума в конце 90х. И на мой взгляд Го тут вообще капля в море.


я уже в теме отписывался о авторе fasthttp который ничего кроме гоу не знает в точности
специалисты которые умеют программировать но слабо разбираются в технологиях малопригоды
тоже самое что выучить весь алфавит и не уметь сказать ни одного слова
Re[15]: Go язык прёт?
От: Cyberax Марс  
Дата: 17.10.18 08:45
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

C>>Если у нас защита памяти используется для минимизации стеков, то тогда промахи по памяти будут частым явлением.

EP>Совсем не обязательно частым. Скажем мы уменьшили изначальный стэк до такого размера что в одной из сотни тысяч корутин его не хватит.
Тогда напрасно тратим память на пустые стеки.

C>>Это как бы немало.

EP>Если у нас таки "реалистичный размер в 64Кб", то в варианте на Go сколько будет?
Столько, сколько нужно.
Sapienti sat!
Re[15]: Go язык прёт?
От: Cyberax Марс  
Дата: 17.10.18 08:46
Оценка:
Здравствуйте, reversecode, Вы писали:

R>https://golang.org/src/runtime/proc.go#L26

Смотрим в книгу, видим фигу. Я уже указал детали — создание горутины не требует взятия блокировок, как и локальное планирование. Блокировки нужны при запуске нового системного потока и при stop-the-world GC.
Sapienti sat!
Re[17]: Go язык прёт?
От: C0x  
Дата: 17.10.18 08:53
Оценка:
Здравствуйте, reversecode, Вы писали:

R>Здравствуйте, C0x, Вы писали:


R>давайте определим где у вас в современном программировании используется сеть ?

R>webservice

У меня тут.

R>и в какой из этих сфер гоу уже более 50% ?


А причем тут эти метрики? Язык молодой достаточно. Поэтому мимо.

R>почти нигде кроме как на webservice гоу нет


А что его кто-то для чего-то другого рекомендует?
Да и очевидным минусом Го в сравнении с Си является GC, поэтому как никрути в некоторых областях ему двери закрыты сразу.

R>ну еще в блокчаин пытаются его пихать


Да пихать можно что угодно куда угодно. Можно например вот Си пихать в написание импорта-экспорта из баз данных. Нах. он там нужен только если с этим отлично даже VB справляется?


R>я уже в теме отписывался о авторе fasthttp который ничего кроме гоу не знает в точности


Это с чего ты такой вывод сделал? я так и не понял если честно. Потому что он там где-то на конфереции замялся в ответе? а может дело не в познаниях языка вовсе было.

R>специалисты которые умеют программировать но слабо разбираются в технологиях малопригоды


Вот тут я тоже не очень понял твою мысль. То есть если чувак реально умеет программировать, знает Алгоритмы и Структуры данных, понимает где и как что нужно оптимизировать, то он "индус" что-ли?

Помоему как раз все наоборот: те кто умеют программировать те и пригодны.

R>тоже самое что выучить весь алфавит и не уметь сказать ни одного слова


Ты сам себе противоречишь. Умение программирование это как раз выучить алфавит и постоянно писать с его помощью.
Re[13]: Go язык прёт?
От: Cyberax Марс  
Дата: 17.10.18 08:54
Оценка:
Здравствуйте, reversecode, Вы писали:

C>>На Go оно практически бесплатное — стек в любой момент легко можно переместить за счёт того, что GC отслеживает все указатели на нём. Так что горутина может начать со стеком всего в килобайт.

R>корутина тоже может в С++ начать с любым стеком
В С++ есть два варианта:
1) Располагать стеки на большом расстоянии друг от друга в виртуальной памяти и вешать sentinel-страницу в конец. При прикосновении к этой странице срабатывает защита памяти и дополнительно добавляет страниц в стек. Это работает не очень хорошо, так как промахи сегментации — вещь дорогая.

2) Сегментированные стеки. Компилятор вставляет в пролог и эпилог функции (или в место вызова) код, который может передвигать указатель стека между сегментами (в виде связного списка). Это тормозит из-за того, что эта проверка — дополнительное и дорогое ветвление, с косвенным доступом. В Golang от этого отказались примерно 5 лет назад из-за тормозов.

Всё, передвигаемые стеки в С++ невозможны.

C>>Ещё из плюсов Go — скорость компиляции. Boost.Asio компилируется ну, так скажем, неторопливо. Go позволяет просто писать "go run ..." и оно менее чем за секунду компилирует и запускает приложение.

R>если буст собрать динамически или архивной либой будет тоже самое
Не будет. Asio — header only.

Учим матчасть.
Sapienti sat!
Re[10]: каналы и GC
От: Sharov Россия  
Дата: 17.10.18 09:02
Оценка:
Здравствуйте, Cyberax, Вы писали:

C> Это всё вполне возможно на С++, хотя каналы будет немного сложно сделать без полноценного GC.


Зачем gc нужен? Чтобы вручную не париться с каналами?
Кодом людям нужно помогать!
Re[18]: Go язык прёт?
От: Cyberax Марс  
Дата: 17.10.18 09:02
Оценка:
Здравствуйте, C0x, Вы писали:

R>>почти нигде кроме как на webservice гоу нет

C0x>А что его кто-то для чего-то другого рекомендует?
C0x>Да и очевидным минусом Го в сравнении с Си является GC, поэтому как никрути в некоторых областях ему двери закрыты сразу.
Кстати, системный софт тоже неплохо пишется. Сказывается пара гениальных решений:
1) Возможность полной независимости от libc.
2) Очень практичная системная библиотека, предоставляющая доступ к многим низкоуровневым вещам.
Sapienti sat!
Re[11]: каналы и GC
От: Cyberax Марс  
Дата: 17.10.18 09:05
Оценка: 4 (1) +1
Здравствуйте, Sharov, Вы писали:

C>> Это всё вполне возможно на С++, хотя каналы будет немного сложно сделать без полноценного GC.

S> Зачем gc нужен? Чтобы вручную не париться с каналами?
Очень легко получить циклические ссылки.
Sapienti sat!
Re[12]: каналы и GC
От: so5team https://stiffstream.com
Дата: 17.10.18 09:11
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Очень легко получить циклические ссылки.


В каналах? Каким образом?
Re[19]: Go язык прёт?
От: C0x  
Дата: 17.10.18 09:13
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Кстати, системный софт тоже неплохо пишется. Сказывается пара гениальных решений:


Есть примеры?
Я что-то пока не очень представляю драйвера написанные на Go. Да и зачем?
Да и темболее опять же во многих системных вещах нужно прямое управлению памятью.

C>1) Возможность полной независимости от libc.


libc так плоха?

C>2) Очень практичная системная библиотека, предоставляющая доступ к многим низкоуровневым вещам.


это есть в любом языке вроде, через использования врапперов над Сишными либами.
Re[13]: каналы и GC
От: Cyberax Марс  
Дата: 17.10.18 09:19
Оценка:
Здравствуйте, so5team, Вы писали:

C>>Очень легко получить циклические ссылки.

S>В каналах? Каким образом?
В коде, который их использует.
Sapienti sat!
Re[20]: Go язык прёт?
От: Cyberax Марс  
Дата: 17.10.18 09:20
Оценка:
Здравствуйте, C0x, Вы писали:

C>>Кстати, системный софт тоже неплохо пишется. Сказывается пара гениальных решений:

C0x>Есть примеры?
Docker, однако.

C0x>Я что-то пока не очень представляю драйвера написанные на Go. Да и зачем?

Системный софт — это не только драйвера.

C0x>Да и темболее опять же во многих системных вещах нужно прямое управлению памятью.

В Go можно напрямую управлять памятью, в том числе и располагать объекты вручную.

C>>1) Возможность полной независимости от libc.

C0x>libc так плоха?
Да.

C>>2) Очень практичная системная библиотека, предоставляющая доступ к многим низкоуровневым вещам.

C0x>это есть в любом языке вроде, через использования врапперов над Сишными либами.
А в Go есть прямо в стандартной библиотеке.
Sapienti sat!
Re[21]: Go язык прёт?
От: C0x  
Дата: 17.10.18 09:30
Оценка:
Здравствуйте, Cyberax, Вы писали:

C0x>>libc так плоха?

C>Да.

Чем?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.