Здравствуйте, Cyberax, Вы писали:
EP>>Плюс, даже без этой возможности — не забываем про резервирование адресного пространства/overcommit — по сути то же расширение по требованию. C>Игры с защитой памяти — достаточно дорогое и сомнительное удовольствие. На 10 тысячах потоков семафор mmap/mprotect в ядре будет раскалён до температуры термоядерного синтеза.
Память часто можно выделять заранее, защита памяти — это больше для успокоения на очень unhappy path.
C>>>Так что на Go легко можно запустить пару десятков тысяч горутин. А на С++ в boost::coroutine только стеки потоков съедят пол-оперативки EP>>На Boost.Coroutine сотни тысяч запускаются без проблем
, причём на древнем ноутбуке, и это без segmented stack C>Если взять более реалистичный размер в 64Кб, то получим 6.5Гб только на стеки при 100000 потоков. Нет, оно будет работать, с этим никто не спорит.
А на десятках тысяч о которых ты говорил выше — будет несколько гигабайт, ну и?
C>Так что горутина может начать со стеком всего в килобайт.
Если память это настолько проблема, а корутин действительно много, то нужно брать stackless корутины — там минимальный размер одной корутины несколько байт — запускай хоть миллиарды
Здравствуйте, Evgeny.Panasyuk, Вы писали:
C>>Игры с защитой памяти — достаточно дорогое и сомнительное удовольствие. На 10 тысячах потоков семафор mmap/mprotect в ядре будет раскалён до температуры термоядерного синтеза. EP>Память часто можно выделять заранее, защита памяти — это больше для успокоения на очень unhappy path.
Ээээ....
Если у нас защита памяти используется для минимизации стеков, то тогда промахи по памяти будут частым явлением.
C>>Если взять более реалистичный размер в 64Кб, то получим 6.5Гб только на стеки при 100000 потоков. Нет, оно будет работать, с этим никто не спорит. EP>А на десятках тысяч о которых ты говорил выше — будет несколько гигабайт, ну и?
Это как бы немало.
C>>Так что горутина может начать со стеком всего в килобайт. EP>Если память это настолько проблема, а корутин действительно много, то нужно брать stackless корутины — там минимальный размер одной корутины несколько байт — запускай хоть миллиарды
Но они требуют специального стиля написания.
ну не сетевые приложения, давайте не будем лукавить
язык дерьмо, ничего дальше написания парсинга и отправки хттп запрос ответов он не годится
этакая замена nginx для кастомизации, да и к тому уже луа прикрутили
язык для бедных с профитом для гугла закрыть недостаток специалистов в своих веб сервисах
порог вхождения в язык ниже плинтуса, что это значит ?
давайте прикинем по аналогии что будет если
каждый сможет стать медиком или президентом или министром всего за недельные курсы
ООоООООооо в стране появится много медиков, президентов и министров.... плохо ли это ??
текущие президент министры и медики должны бояться конкуренции ??
Здравствуйте, 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, причём уже несколько версий назад.
R>ну не сетевые приложения, давайте не будем лукавить
UDP, TCP без проблем прямо сейчас создаю на коленке. И работает.
Не я не против и могу вполне на Си такое колбасить, но это потребует больше времени и возни с либами (я кроссплатформенное решение делаю), ковыряния скорее всего в тонкостях работы разных либ.
R>язык дерьмо, ничего дальше написания парсинга и отправки хттп запрос ответов он не годится
Это типа "шуруповерт на батарейках дерьмо, ничего кроме закручивания маленьких шурупов в ДСП он не умеет"?
R>давайте прикинем по аналогии что будет если R>каждый сможет стать медиком или президентом или министром всего за недельные курсы
Не нужно ничего сочинять и прикидывать, Не сможет каждый стать медиком! Так же не сможет каждый стать хорошим программистом.
И то что есть понятие "Индус" в программировании так это уже лет 20 как, еще со времён Интернет Бума в конце 90х. И на мой взгляд Го тут вообще капля в море.
Здравствуйте, Cyberax, Вы писали:
C>Потому, что все эти библиотеки сложно использовать — кроме горутин ещё нужны каналы и полноценный планировщик. Это всё вполне возможно на С++, хотя каналы будет немного сложно сделать без полноценного GC.
Планировщик, каналы и прочая обвязка есть в Boost.Fiber.
То есть в Boost есть три библиотеки на тему stackful, начиная от низкого к более высокому уровню: Boost.Context, Boost.Coroutine, Boost.Fiber.
Здравствуйте, C0x, Вы писали:
C0x>Здравствуйте, reversecode, Вы писали:
R>>ну не сетевые приложения, давайте не будем лукавить
C0x>UDP, TCP без проблем прямо сейчас создаю на коленке. И работает. C0x>Не я не против и могу вполне на Си такое колбасить, но это потребует больше времени и возни с либами (я кроссплатформенное решение делаю), ковыряния скорее всего в тонкостях работы разных либ.
R>>язык дерьмо, ничего дальше написания парсинга и отправки хттп запрос ответов он не годится
C0x>Это типа "шуруповерт на батарейках дерьмо, ничего кроме закручивания маленьких шурупов в ДСП он не умеет"?
объединим два вопроса,
значит гоу по вашему хорош для сетевого программирования
давайте определим где у вас в современном программировании используется сеть ?
webservice
gamedev
voip
iptv
blockchain
добавляйте, может я что то упустил ?
и в какой из этих сфер гоу уже более 50% ?
почти нигде кроме как на webservice гоу нет
ну еще в блокчаин пытаются его пихать
R>>давайте прикинем по аналогии что будет если R>>каждый сможет стать медиком или президентом или министром всего за недельные курсы
C0x>Не нужно ничего сочинять и прикидывать, Не сможет каждый стать медиком! Так же не сможет каждый стать хорошим программистом. C0x>И то что есть понятие "Индус" в программировании так это уже лет 20 как, еще со времён Интернет Бума в конце 90х. И на мой взгляд Го тут вообще капля в море.
я уже в теме отписывался о авторе fasthttp который ничего кроме гоу не знает в точности
специалисты которые умеют программировать но слабо разбираются в технологиях малопригоды
тоже самое что выучить весь алфавит и не уметь сказать ни одного слова
Здравствуйте, Evgeny.Panasyuk, Вы писали:
C>>Если у нас защита памяти используется для минимизации стеков, то тогда промахи по памяти будут частым явлением. EP>Совсем не обязательно частым. Скажем мы уменьшили изначальный стэк до такого размера что в одной из сотни тысяч корутин его не хватит.
Тогда напрасно тратим память на пустые стеки.
C>>Это как бы немало. EP>Если у нас таки "реалистичный размер в 64Кб", то в варианте на Go сколько будет?
Столько, сколько нужно.
Здравствуйте, reversecode, Вы писали:
R>https://golang.org/src/runtime/proc.go#L26
Смотрим в книгу, видим фигу. Я уже указал детали — создание горутины не требует взятия блокировок, как и локальное планирование. Блокировки нужны при запуске нового системного потока и при stop-the-world GC.
Здравствуйте, reversecode, Вы писали:
R>Здравствуйте, C0x, Вы писали:
R>давайте определим где у вас в современном программировании используется сеть ? R>webservice
У меня тут.
R>и в какой из этих сфер гоу уже более 50% ?
А причем тут эти метрики? Язык молодой достаточно. Поэтому мимо.
R>почти нигде кроме как на webservice гоу нет
А что его кто-то для чего-то другого рекомендует?
Да и очевидным минусом Го в сравнении с Си является GC, поэтому как никрути в некоторых областях ему двери закрыты сразу.
R>ну еще в блокчаин пытаются его пихать
Да пихать можно что угодно куда угодно. Можно например вот Си пихать в написание импорта-экспорта из баз данных. Нах. он там нужен только если с этим отлично даже VB справляется?
R>я уже в теме отписывался о авторе fasthttp который ничего кроме гоу не знает в точности
Это с чего ты такой вывод сделал? я так и не понял если честно. Потому что он там где-то на конфереции замялся в ответе? а может дело не в познаниях языка вовсе было.
R>специалисты которые умеют программировать но слабо разбираются в технологиях малопригоды
Вот тут я тоже не очень понял твою мысль. То есть если чувак реально умеет программировать, знает Алгоритмы и Структуры данных, понимает где и как что нужно оптимизировать, то он "индус" что-ли?
Помоему как раз все наоборот: те кто умеют программировать те и пригодны.
R>тоже самое что выучить весь алфавит и не уметь сказать ни одного слова
Ты сам себе противоречишь. Умение программирование это как раз выучить алфавит и постоянно писать с его помощью.
Здравствуйте, reversecode, Вы писали:
C>>На Go оно практически бесплатное — стек в любой момент легко можно переместить за счёт того, что GC отслеживает все указатели на нём. Так что горутина может начать со стеком всего в килобайт. R>корутина тоже может в С++ начать с любым стеком
В С++ есть два варианта:
1) Располагать стеки на большом расстоянии друг от друга в виртуальной памяти и вешать sentinel-страницу в конец. При прикосновении к этой странице срабатывает защита памяти и дополнительно добавляет страниц в стек. Это работает не очень хорошо, так как промахи сегментации — вещь дорогая.
2) Сегментированные стеки. Компилятор вставляет в пролог и эпилог функции (или в место вызова) код, который может передвигать указатель стека между сегментами (в виде связного списка). Это тормозит из-за того, что эта проверка — дополнительное и дорогое ветвление, с косвенным доступом. В Golang от этого отказались примерно 5 лет назад из-за тормозов.
Всё, передвигаемые стеки в С++ невозможны.
C>>Ещё из плюсов Go — скорость компиляции. Boost.Asio компилируется ну, так скажем, неторопливо. Go позволяет просто писать "go run ..." и оно менее чем за секунду компилирует и запускает приложение. R>если буст собрать динамически или архивной либой будет тоже самое
Не будет. Asio — header only.
Здравствуйте, C0x, Вы писали:
R>>почти нигде кроме как на webservice гоу нет C0x>А что его кто-то для чего-то другого рекомендует? C0x>Да и очевидным минусом Го в сравнении с Си является GC, поэтому как никрути в некоторых областях ему двери закрыты сразу.
Кстати, системный софт тоже неплохо пишется. Сказывается пара гениальных решений:
1) Возможность полной независимости от libc.
2) Очень практичная системная библиотека, предоставляющая доступ к многим низкоуровневым вещам.
Здравствуйте, Sharov, Вы писали:
C>> Это всё вполне возможно на С++, хотя каналы будет немного сложно сделать без полноценного GC. S> Зачем gc нужен? Чтобы вручную не париться с каналами?
Очень легко получить циклические ссылки.
Здравствуйте, Cyberax, Вы писали:
C>Кстати, системный софт тоже неплохо пишется. Сказывается пара гениальных решений:
Есть примеры?
Я что-то пока не очень представляю драйвера написанные на Go. Да и зачем?
Да и темболее опять же во многих системных вещах нужно прямое управлению памятью.
C>1) Возможность полной независимости от libc.
libc так плоха?
C>2) Очень практичная системная библиотека, предоставляющая доступ к многим низкоуровневым вещам.
это есть в любом языке вроде, через использования врапперов над Сишными либами.
Здравствуйте, C0x, Вы писали:
C>>Кстати, системный софт тоже неплохо пишется. Сказывается пара гениальных решений: C0x>Есть примеры?
Docker, однако.
C0x>Я что-то пока не очень представляю драйвера написанные на Go. Да и зачем?
Системный софт — это не только драйвера.
C0x>Да и темболее опять же во многих системных вещах нужно прямое управлению памятью.
В Go можно напрямую управлять памятью, в том числе и располагать объекты вручную.
C>>1) Возможность полной независимости от libc. C0x>libc так плоха?
Да.
C>>2) Очень практичная системная библиотека, предоставляющая доступ к многим низкоуровневым вещам. C0x>это есть в любом языке вроде, через использования врапперов над Сишными либами.
А в Go есть прямо в стандартной библиотеке.