Re[10]: Mногопоточность: C++ vs Erlang vs другие
От: Evgeny.Panasyuk Россия  
Дата: 05.06.15 09:51
Оценка:
Здравствуйте, vdimas, Вы писали:

EP>>В ASIO есть поддержка IOCP, если чего-то необходимого нет — то при необходимости реализуется.

EP>>Вопрос же скорее был про неявную нарезку алгоритма на фрагменты ("same fringe problem") — вот для этого подходит Boost.Coroutine, причём не только для IOCP — а и для любого другого подобного асинхронного кода.
V>Ну, stateful нечестно ))

Они как раз для этого и предназначены.
Также есть частичная эмуляция stackless в Boost.Asio.

V>Для которотких и "неглубоких" обработчиков он, прямо скажем, из пушки по воробьям.


Не спорю, поэтому и считаю что нужны и stackless и stackful — они подходят для разных задач.

V>Вот у тебя 200k сессий съели почти всю память под стеки, а в случае stateless нужно ровно столько стеков, сколько физических потоков в пуле. При том, что "коротких" stateless-обработчиков может быть хоть под миллион и они нифига не съедят столько памяти.


Это понятно, тут со stateless хорошо то что они требуют ровно столько памяти, сколько требуется. Но вопрос-то был про другое.
Тем не менее, я без проблем запускал 400k stackful корутин на ноутбуке
Автор: Evgeny.Panasyuk
Дата: 30.11.13
, причём это далеко не предел.
Re[5]: Почему Эрланг
От: neFormal Россия  
Дата: 05.06.15 09:51
Оценка:
Здравствуйте, so5team, Вы писали:

S>Т.о. зачем перекладывать на VM задачи, которые уже решены на уровне ОС, не понятно в принципе.


разные подходы в шедулинге.

F>>3. единое пространство потоков/процессов на нескольких физических юнитах

S>Честно скажу, не очень понимаю, что это такое и зачем это нужно. Полагаю, что хороший пример чего-то подобного можно увидеть в .NET-овском Orleans, который уже упоминался выше в связи с очень интересной моделью акторов.

это довольно удобная штука, которая позволяет балансить нагрузку в соответствии со своими представлениями, загружать код на удалённые железки и динамически подключать новые юниты в кластер.
в orleans я, честно говоря, не нашёл ничего про это. по идее, должно бы быть описано в блоке silos. но он пустой.
а что там интересного в модели акторов? что они "виртуальные"? что это даёт?
...coding for chaos...
Re[6]: Почему Эрланг
От: so5team https://stiffstream.com
Дата: 05.06.15 10:05
Оценка:
Здравствуйте, neFormal, Вы писали:

S>>Т.о. зачем перекладывать на VM задачи, которые уже решены на уровне ОС, не понятно в принципе.


F>разные подходы в шедулинге.


Насколько разные? В одном только Linux-е несколько типов диспетчеров, под разные профили нагрузки. В РТОС свои диспетчеры, со своими тараканами.

Вы хотите сказать, что Erlang-овский шедулер заруливает их все по-определению?

F>это довольно удобная штука, которая позволяет балансить нагрузку в соответствии со своими представлениями,


Зачем для этого единое пространство процессов-потоков?

F>загружать код на удалённые железки и


Это проблема системы деплоймента. Не обязательно она должна быть зашита в язык.

F> динамически подключать новые юниты в кластер.


Зачем для этого единое пространство процессов-потоков? Разве недостаточно лишь ссылочной прозрачности для акторов?

F>в orleans я, честно говоря, не нашёл ничего про это. по идее, должно бы быть описано в блоке silos. но он пустой.

F>а что там интересного в модели акторов? что они "виртуальные"? что это даёт?

Тем, что актор виртуально присутствует на любом узле в любое время. На самом деле его может и не быть в памяти, он автоматически поднимется, когда в этом возникнет необходимость. Причем, если позволяют условия, его могут поднять максимально близко к тому, кому этот актор понадобился (если я правильно помню PDF-ку с описанием).
Re[9]: Почему Эрланг
От: neFormal Россия  
Дата: 05.06.15 10:09
Оценка: :)
Здравствуйте, so5team, Вы писали:

S>Несложно показать, что в принципе, сам Erlang не спасает ни от зависаний, ни от крахов.


всё не отпускает? а если метеорит упадёт, то оно тоже не должно зависать, да?
заканчивай с придирками.

S>Спрашивается, почему по-уму нельзя сделать на C++, Scala или Haskell?


на c++ нельзя добиться отказоустойчивости при ошибке в коде.
в скале в принципе можно всё сделать, но я не в курсе, что там с остальными пунктами.
хаксель тоже покрывает только часть пунктов, потому что натив.
...coding for chaos...
Re[10]: Почему Эрланг
От: so5team https://stiffstream.com
Дата: 05.06.15 10:14
Оценка:
Здравствуйте, neFormal, Вы писали:

S>>Спрашивается, почему по-уму нельзя сделать на C++, Scala или Haskell?


F>на c++ нельзя добиться отказоустойчивости при ошибке в коде.


Поэтому C++ -- это один из языков, разрешенных к применению в mission-critical системах.

"заканчивай с придирками" (с) neFormal
Re[10]: Почему Эрланг
От: Evgeny.Panasyuk Россия  
Дата: 05.06.15 10:20
Оценка:
Здравствуйте, neFormal, Вы писали:

S>>Спрашивается, почему по-уму нельзя сделать на C++, Scala или Haskell?

F>на c++ нельзя добиться отказоустойчивости при ошибке в коде.

Можно, почему нет?
Вообще, что имеется в виду? Какой-нибудь seg-fault?
Отредактировано 05.06.2015 10:22 Evgeny.Panasyuk . Предыдущая версия .
Re[5]: Почему Эрланг
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.06.15 10:27
Оценка:
Здравствуйте, so5team, Вы писали:

S>Параллельное выполнение множества задач поддерживается в многозадачных ОС уже лет 50 как, если не больше. А с момента появления и распространения ОС, в которых единицей диспетчеризации является не процесс, а нить, прошло уже лет 25-30.

Ок, без проблем. Какая из распространённых ОС позволит запустить одновременно 100К нитей? Какое железо ей для этого потребуется?
25-30 лет назад понятие "множество" означало "примерно 100".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: Mногопоточность: C++ vs Erlang vs другие
От: BulatZiganshin  
Дата: 05.06.15 10:31
Оценка:
Здравствуйте, Sinclair, Вы писали:

V>>Просто напомню, что IOCP — это не только ввод/вывод, это просто механизм очереди событий, некий "порт", к которому можно подключить и ввод-вывод в том числе, и тогда PostQueuedCompletionStatus будет выполнять сама система по готовности данных.

S>IOCP, в данном контексте, это механизм, который позволяет нам "ждать" неограниченного, в принципе, количества событий, не потребляя на каждое из них системный thread.
S>Напомню, что исходная проблема — ровно в том, что традиционные императивные ЯП ориентированы именно на концепцию "control flow", и весь ввод-вывод предполагается блокирующим.
S>Готовых механизмов для того, чтобы "уснуть" в точке вызова, и "проснуться" в момент прихода события, и при этом не занимать thread, в них нету.

а boost.coroutine? и вообще проблема не в том что языки плохие, а в том что в такой парадигме банально удобней програмировать. погляди на node.js — там от этой модели избавились, и кому это нужно?
Люди, я люблю вас! Будьте бдительны!!!
Re[4]: Почему Эрланг
От: BulatZiganshin  
Дата: 05.06.15 10:33
Оценка:
Здравствуйте, Sinclair, Вы писали:

BZ>>соответственно, вопрос "нужен ли эрланг разработчикам свитчей" предлагаю оставить открытым и перейти ко всяким там nginx'ам

S>Давайте перейдём. http://joeandmotorboat.com/2009/01/03/nginx-vs-yaws-vs-mochiweb-web-server-performance-deathmatch-part-2/
S>См. графики, где Erlang with Kernel Polling.

а как это доказыват тезис о том что нужны *все* особенности эралнговской vm? у меня например архиватор, некоторых вохможностей эрланга/ghc мне не хватает, но устойчивость к аппаратным ошибкам в их число не входит
Люди, я люблю вас! Будьте бдительны!!!
Re[6]: Почему Эрланг
От: so5team https://stiffstream.com
Дата: 05.06.15 10:36
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ок, без проблем. Какая из распространённых ОС позволит запустить одновременно 100К нитей? Какое железо ей для этого потребуется?


Полагаю, что 64-х битовые Linux, FreeBSD, Windows. На хорошем железе, да.

Но суть в другом: не нужно работать с потоками ОС так же, как с легковесными процессами Erlang-а. Соответственно, повторю в очередной раз: в большинстве распространенных языков нет того, что есть в Erlang. По определению. Тем не менее, задачи из области parallel-, concurrent- и distributed computing на этих языках решаются ничуть не хуже, чем на Erlang-е.
Re[7]: Почему Эрланг
От: neFormal Россия  
Дата: 05.06.15 10:39
Оценка:
Здравствуйте, so5team, Вы писали:

S>Вы хотите сказать, что Erlang-овский шедулер заруливает их все по-определению?


с чего вдруг? я такого не говорил.

F>>это довольно удобная штука, которая позволяет балансить нагрузку в соответствии со своими представлениями,

S>Зачем для этого единое пространство процессов-потоков?

можно прозрачно обращаться к разным узлам.

F>>загружать код на удалённые железки и

S>Это проблема системы деплоймента. Не обязательно она должна быть зашита в язык.

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

F>> динамически подключать новые юниты в кластер.

S>Зачем для этого единое пространство процессов-потоков? Разве недостаточно лишь ссылочной прозрачности для акторов?

что это значит в данном случае? а то я подозреваю, что мы об одном и том же.

F>>а что там интересного в модели акторов? что они "виртуальные"? что это даёт?

S>Тем, что актор виртуально присутствует на любом узле в любое время. На самом деле его может и не быть в памяти, он автоматически поднимется, когда в этом возникнет необходимость. Причем, если позволяют условия, его могут поднять максимально близко к тому, кому этот актор понадобился (если я правильно помню PDF-ку с описанием).

не понимаю пока, чем это может быть полезно. видимо, это для просто параллельных рассчётов, где не важно расположение актора.
а когда хочется размещать это-там-а-это-вон-там, то подобное поведение начинает мешать.
...coding for chaos...
Re[11]: Почему Эрланг
От: neFormal Россия  
Дата: 05.06.15 10:39
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Вообще, что имеется в виду? Какой-нибудь seg-fault?


да, я про него.
...coding for chaos...
Re[7]: Почему Эрланг
От: BulatZiganshin  
Дата: 05.06.15 10:40
Оценка:
Здравствуйте, so5team, Вы писали:

S>Но там же было сказано и более важное: нельзя предъявлять к C++/Scala/C#/Haskell/Ada и пр. такую претензию, что в этих языках нет фишек Erlang-а. Конечно их там нет. Более того, очевидно, что их там и не может быть (особенно если язык нативный). Но для решения таких же проблем concurrency computing и distributed computing в этих языках просто-напросто будут использоваться другие подходы и другие инструменты. И результат будет получаться не менее достойный.


в ghc (нативный компилятор хаскела) есть зелёные потоки, переключение происходит в момент аллокации, а она происходит постоянно

и я не согласен с твоей идеей что в C++ можно использовать только акторы. зелёные потоки — это по сути короутины, выполняемые из пула потоков, с автоматическим yield. ближайшим их аналогом в C++ являются те же самые короутины с ручным yield. при этом логика программы остаётся понятной, и очевидно кого срубать при возникновении исключения. task parallelism следует использовать только в случаях, когда очевидного разделения на процессы нет, а есть к примеру поток объектов, подвергаемых разнообразным преобразованиям

чем отличаются акторы от task parallelism, я пока не в курсе
Люди, я люблю вас! Будьте бдительны!!!
Re[12]: Почему Эрланг
От: Evgeny.Panasyuk Россия  
Дата: 05.06.15 10:49
Оценка:
Здравствуйте, neFormal, Вы писали:

EP>>Вообще, что имеется в виду? Какой-нибудь seg-fault?

F>да, я про него.

Это решается компилятором и рантаймом. И проверка адресной арифметики, и контроль разыменования dangling poitners.
Re[9]: Почему Эрланг
От: meadow_meal  
Дата: 05.06.15 10:51
Оценка:
Здравствуйте, so5team, Вы писали:

S>Боюсь, вы уводите разговор в другую сторону.


Да, в практическую — из стороны "спасает ли Erlang от зависаний и крахов в 100% случаев" и "можно ли на С++ написать все что угодно".

В теории ответы нет и да.

На практике написать отказоустойчивое приложение во многих случаях быстрее и дешевле на Эрланге, а две строки кода устанавливающие system_monitor срубающий обожравшийся памяти процесс спасли бы флюссоник от падений (но не от бага, конечно!) в широком спектре возможных неприятностей, включая описанную.
Re[8]: Почему Эрланг
От: so5team https://stiffstream.com
Дата: 05.06.15 10:52
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>и я не согласен с твоей идеей что в C++ можно использовать только акторы. зелёные потоки — это по сути короутины, выполняемые из пула потоков, с автоматическим yield. ближайшим их аналогом в C++ являются те же самые короутины с ручным yield. при этом логика программы остаётся понятной, и очевидно кого срубать при возникновении исключения.


У меня нет такой идеи. Даже в первом своем сообщении в этой теме в качестве примера фреймворка для C++ был приведен фреймворк Synca, который как раз сопрограммы и использует.

BZ>чем отличаются акторы от task parallelism, я пока не в курсе


В task parallelism, если я правильно помню, есть однородный поток задач, которые обрабатываются одним и тем же образом. Грубо говоря, идет поток текстовых сообщений, которые нужно зашифровать и подписать.

Акторы могут принимать поток из разных типов сообщений, обработка которых может зависеть от состояния актора. Грубо говоря, актор может представлять из себя читатель MQ-шных топиков, откуда идут запросы check_client, money_reserve, money_transfer_begin, money_transfer_status, money_transfer_cancel и т.д. При этом актор может проконтролировать, что сейчас он перегружен, не способен нормально обслуживать заявки и на запросы, скажем check_client/money_reserve/money_transfer_begin будет отвечать специальным кодом ошибки "overloaded".
Re[9]: Почему Эрланг
От: meadow_meal  
Дата: 05.06.15 10:58
Оценка: 3 (2)
Здравствуйте, neFormal, Вы писали:

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


_>>Мы пишем игровые сервера на Эрланге, приходилось интегрировать bullet3d (порядка 500 динамических миров на сервер, шедулер справляется), box2d, самописные тайловые и воксельные движки, но это 5-10% задач, большая часть времени все равно уходит на игровую логику, так что достоинствами Эрланга наслаждаемся в полный рост.


F>а что за игрушки?


Block n Load
Entropy
Battlestar Galactica Online
и другие
Re[8]: Почему Эрланг
От: so5team https://stiffstream.com
Дата: 05.06.15 11:00
Оценка:
Здравствуйте, neFormal, Вы писали:

S>>Вы хотите сказать, что Erlang-овский шедулер заруливает их все по-определению?


F>с чего вдруг? я такого не говорил.


Вот с этого:

F> 1. параллельное выполнение множества задач


Шедулеры ОС прекрасно справляются с этой штукой и труда в доведения шедулеров ОС до state-of-the-art тратиться в разы больше, чем для шедулера Erlang-а.

F>>>это довольно удобная штука, которая позволяет балансить нагрузку в соответствии со своими представлениями,

S>>Зачем для этого единое пространство процессов-потоков?

F>можно прозрачно обращаться к разным узлам.


Это возможно и в случае, если адресация акторов не привязана к конкретным узлам.

F>>>загружать код на удалённые железки и

S>>Это проблема системы деплоймента. Не обязательно она должна быть зашита в язык.

F>ээ, нет. деплой тут уже ни при чём.

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

На узлах кластера дистрибутив Erlang-а откуда возникает? Записывается на винчестер производителем железа.
Т.к. Erlang VM вам нужно деплоить на все узлы кластера, точно так же вы можете деплоить хоть нативный код, хоть jar-ы, хоть .NET-овские сборки.

F>>> динамически подключать новые юниты в кластер.

S>>Зачем для этого единое пространство процессов-потоков? Разве недостаточно лишь ссылочной прозрачности для акторов?

F>что это значит в данном случае? а то я подозреваю, что мы об одном и том же.


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

F>>>а что там интересного в модели акторов? что они "виртуальные"? что это даёт?

S>>Тем, что актор виртуально присутствует на любом узле в любое время. На самом деле его может и не быть в памяти, он автоматически поднимется, когда в этом возникнет необходимость. Причем, если позволяют условия, его могут поднять максимально близко к тому, кому этот актор понадобился (если я правильно помню PDF-ку с описанием).

F>не понимаю пока, чем это может быть полезно. видимо, это для просто параллельных рассчётов, где не важно расположение актора.

F>а когда хочется размещать это-там-а-это-вон-там, то подобное поведение начинает мешать.

Не противоречит ли "хочется размещать это-там-а-это-вон-там" вашему же собственному требованию о прозрачности?
Re[10]: Почему Эрланг
От: so5team https://stiffstream.com
Дата: 05.06.15 11:04
Оценка:
Здравствуйте, meadow_meal, Вы писали:

_>На практике написать отказоустойчивое приложение во многих случаях быстрее и дешевле на Эрланге,


На практике все упирается как в условия конкретной задачи, так и в наличие подходящих инструментов. Полагаю, что написание какой-нибудь Web-ни на Erlang-е на порядок проще, чем на C++. Тогда как в ситуации со специализированным софтом для управления оборудованием с применением CORBA и DDS все будет наоборот.
Re[13]: Почему Эрланг
От: neFormal Россия  
Дата: 05.06.15 11:23
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>>>Вообще, что имеется в виду? Какой-нибудь seg-fault?

F>>да, я про него.
EP>Это решается компилятором и рантаймом. И проверка адресной арифметики, и контроль разыменования dangling poitners.

а можешь ссылок дать, где про это почитать?
...coding for chaos...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.