Re[11]: Mногопоточность: C++ vs Erlang vs другие
От: WolfHound  
Дата: 05.06.15 14:09
Оценка:
Здравствуйте, hi_octane, Вы писали:

I>>Опять "лучший" и уже наверное третий год обещаний "скоро мы сделаем тааакоое !"

_>Чисто развеять сомнения — сорцы нитры открыты, можешь дать ссылку на хотя-бы аналогичный?
Ближайший конкурент ANTLR4.
Но изменение грамматики во время разбора он не умеет и восстановление после ошибок у меня лучше (но ещё есть что улучшить).
Да и сам язык описания грамматики более человечный.
Остальные даже близко не стояли.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: Mногопоточность: C++ vs Erlang vs другие
От: Mamut Швеция http://dmitriid.com
Дата: 05.06.15 14:10
Оценка:
V>К тому же, алгоритм "work stealing" является наилучшим известным на сегодня для диспетчеризации зеленых потоков. Какой алгоритм диспетчеризации в Эрланге?

https://www.erlang-solutions.com/resources/webinars/understanding-erlang-scheduler

Грубо говоря:
— По scheduler'у на ядро
— У каждого scheduler'а очередь, в которую кладутся процессы
— Когда начинает выполняться процесс, ему присваиватеся счетчик редукций
— На каждое действие (вызов функции, посылка сообщения и т.п.) счетчик уменьшается на один
— Когда счетчик доходит до нуля, процесс перемещается в конец очереди
— Процессы, которые ничего не выполняют (например, ожидают сообщение), в очереди не участвуют
— scheduler, у которого пустая очередь, может попросить другие scheduler'ы отдать ему процесс на обработку


Каждый из списка пункт настраивается: можно менять количество scheduler'ов, поведеине по передаче процессов, количество редукций и т.п. В последних версиях огромное количество внимание уделено внутренностям "scheduler'ов": все очереди lock-free, передачи процессов берут в расчет переключение контекстов CPU и cache misses, и стараются их избежать и т.п.


dmitriid.comGitHubLinkedIn
Re[8]: Mногопоточность: C++ vs Erlang vs другие
От: Mamut Швеция http://dmitriid.com
Дата: 05.06.15 14:17
Оценка:
M>>Я перестал тебя понимать.

BZ>была ли эта грамотная реализация в првой версии эрланга?


Почти Потому что первая версия — это, по сути, Пролог с сахаром

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


То, что она грамотна доказывается эмпирически — опытом использования То, что она будет развиваться — понятно, что будет А кривизна баблиотек выливается из их кривизны: то, что в Эрланге считается простым туториалом для новичков (реализация gen_server) для большинства языков — это задача для семи пядей во лбу или вообще невыполнима


dmitriid.comGitHubLinkedIn
Re[9]: Mногопоточность: C++ vs Erlang vs другие
От: meadow_meal  
Дата: 05.06.15 14:20
Оценка:
Здравствуйте, WolfHound, Вы писали:

_>>для 2) — не имеет значения, так как N всегда мало.

WH>Ровно до тех пор, когда их вдруг станет много.
WH>Именно это случилось в истории по ссылке.

Да нет же, в истории по ссылке случилась проблема с selective receive при коллах, и ее пофиксили 5 лет назад, ссылку я приводил.

Кроме коллов — не могу придумать причину использовать selective receive в нагруженных процессах, если кто-то использует — было бы интересно узнать зачем, но в любом случае это уже экзотика какая-то, а сама претензия уровня — почему реверс списка O(n). Для коллов — другое дело, т.к. функциональность базовая.

WH>1)Динамическая типизация -> неустранимые тормоза.


Ну и ладно.

WH>2)selective receive -> неустранимые тормоза + отказ в обслуживании в результате кратковременного сбоя.


Да нет такой проблемы.
Re[9]: Почему Эрланг
От: Mamut Швеция http://dmitriid.com
Дата: 05.06.15 14:22
Оценка:
S>Боюсь, вы уводите разговор в другую сторону. Некто под ником neFormal выдвинул ряд требований к языкам/фреймворкам/платформам, которые должны быть выполнены прежде, чем эти языки/фреймворки/платформы смогут считаться достойными сравнения с Erlang-ом. При этом в списке требований был пункт про отсутствие зависаний и крахов в принципе.

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


Эрланг и не претендует. Потому что отказоустойчивая система обязана иметь как минимум две машины (см. работу Армстронга).

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


dmitriid.comGitHubLinkedIn
Re[9]: Mногопоточность: C++ vs Erlang vs другие
От: BulatZiganshin  
Дата: 05.06.15 14:24
Оценка:
Здравствуйте, Mamut, Вы писали:

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


M>То, что она грамотна доказывается эмпирически — опытом использования


а опыт использования tbb у тебя есть?

M>То, что она будет развиваться — понятно, что будет А кривизна баблиотек выливается из их кривизны: то, что в Эрланге считается простым туториалом для новичков (реализация gen_server) для большинства языков — это задача для семи пядей во лбу или вообще невыполнима


а какие конкретно проблемы ты не смог решить, используя tbb?
Люди, я люблю вас! Будьте бдительны!!!
Re[15]: Почему Эрланг
От: Mamut Швеция http://dmitriid.com
Дата: 05.06.15 14:25
Оценка:
S>Наглядная демонстрация того, что даже 64-бит Windows Home на далеко не серверном железе позволяет запускать 100K нитей. Что уже про Linux-ы/Unix-ы говорить.

Хорошо. Запустил ты их. Дальше что? mutex.lock? WaitForThread? Ручной менеджмент потоков?


dmitriid.comGitHubLinkedIn
Re[7]: Почему Эрланг
От: Mamut Швеция http://dmitriid.com
Дата: 05.06.15 14:26
Оценка:
S>Но суть в другом: не нужно работать с потоками ОС так же, как с легковесными процессами Erlang-а.

Почему?

S>Соответственно, повторю в очередной раз: в большинстве распространенных языков нет того, что есть в Erlang. По определению. Тем не менее, задачи из области parallel-, concurrent- и distributed computing на этих языках решаются ничуть не хуже, чем на Erlang-е.


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


dmitriid.comGitHubLinkedIn
Re[17]: Почему Эрланг
От: neFormal Россия  
Дата: 05.06.15 14:33
Оценка:
Здравствуйте, so5team, Вы писали:

S>Тогда зачем был написан вот этот список:

S>Если для многих задач Erlang не подходит чуть больше, чем полностью.

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

S>Причем там, где он не подходит, все эти пункты решены давным-давно и никто уже по этому поводу даже не парится?


где они решены все сразу, а не частично?
не надо игнорировать какие-то пункты. иначе мы дойдём до того, что в принципе и на брейнфаке это всё реализуемо, если захотеть и не лениться.
пункты обязательны для сравнения. по остальным (скорость работы, удобства языка, чтотоещё) можно уже торговаться при выборе технологии для проекта.
...coding for chaos...
Re[9]: Почему Эрланг
От: BulatZiganshin  
Дата: 05.06.15 14:34
Оценка:
Здравствуйте, so5team, Вы писали:

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


среди штук 5 акторных бибилотек. при этом ты ни словом не упомянул наиболее известные tbb/ppl/boost.coroutine и сказал что подход с потоками принципиально неприменим в C++. на мой же взгляд, акторы — это малопопулярная парадигма, а основная как раз сейчас — task paralleleism к постепенным переходом к асинку (stackful/stackless coroutines)

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


один вариант — это дерево задач, порождающих задачи и ждущих результата их исполнения. c++11 futures с доп. операциями типа waitAll и then. второй — это статичный граф задач, через которые текут потоки сообщений. в обоих случаях понятно как распространять исключения. в общем-то, мне кажется и в sobj это можно сделать — если кто-то подписался на сообщения от скончавшегося актора, то вместо очередного сообщения возбуждаем исключение в получателе. вероятно, в вашей скада-системе это просто незачем, да и вообще в моих по крайней мере задачах publish-subscribe имеет смысл только для доп. функционала (ui, logfile), а граф управления выглядит иначе
Люди, я люблю вас! Будьте бдительны!!!
Отредактировано 05.06.2015 14:55 BulatZiganshin . Предыдущая версия .
Re[10]: Mногопоточность: C++ vs Erlang vs другие
От: Mamut Швеция http://dmitriid.com
Дата: 05.06.15 14:35
Оценка:
M>>То, что она грамотна доказывается эмпирически — опытом использования

BZ>а опыт использования tbb у тебя есть?


Нет

M>>То, что она будет развиваться — понятно, что будет А кривизна баблиотек выливается из их кривизны: то, что в Эрланге считается простым туториалом для новичков (реализация gen_server) для большинства языков — это задача для семи пядей во лбу или вообще невыполнима


BZ>а какие конкретно проблемы ты не смог решить, используя tbb?



Покажи мне реализацию supervision trees или простейшего gen_server'а на tbb.

И вообще предлагаю еще раз перечитать тут: http://rsdn.ru/forum/flame.comp/6068392
Автор: Mamut
Дата: 04.06.15
Эрланг — это не только возможность создавать миллион потоков.


dmitriid.comGitHubLinkedIn
Re[9]: Почему Эрланг
От: BulatZiganshin  
Дата: 05.06.15 14:36
Оценка:
Здравствуйте, so5team, Вы писали:

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


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


S>Вот с этого:


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


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


ты всё же определись — справляется ли шедулер винды с 100К потоков так же легко как эрланг или нет, а то ты уже несколько раз свою точку зрения в этом треде менял
Люди, я люблю вас! Будьте бдительны!!!
Re[16]: Почему Эрланг
От: so5team https://stiffstream.com
Дата: 05.06.15 14:40
Оценка:
Здравствуйте, Mamut, Вы писали:

S>>Наглядная демонстрация того, что даже 64-бит Windows Home на далеко не серверном железе позволяет запускать 100K нитей. Что уже про Linux-ы/Unix-ы говорить.


M>Хорошо. Запустил ты их. Дальше что? mutex.lock? WaitForThread? Ручной менеджмент потоков?


Ссылка на исходник была дана выше. Посмотрите в код, поищите ручную работу с нитями/mutex-ами и еще чем-либо низкоуровневым.
Re[7]: Почему Эрланг
От: BulatZiganshin  
Дата: 05.06.15 14:41
Оценка:
Здравствуйте, so5team, Вы писали:

S>Но суть в другом: не нужно работать с потоками ОС так же, как с легковесными процессами Erlang-а. Соответственно, повторю в очередной раз: в большинстве распространенных языков нет того, что есть в Erlang. По определению. Тем не менее, задачи из области parallel-, concurrent- и distributed computing на этих языках решаются ничуть не хуже, чем на Erlang-е.


хорошо, ответим здесь. в хаскеле зелёные потоки есть. в C++ есть короутины, которые отличаются только тем, что надо вручную делать yield. соответственно, самый удобный для программистов вариант — именно короутины, а все прочие подходы, включая акторы — там где они удобны именно для выражения алгоритма задачи, безотсносительно к тому, один поток ОС их исполняет или десять
Люди, я люблю вас! Будьте бдительны!!!
Re[8]: Почему Эрланг
От: neFormal Россия  
Дата: 05.06.15 14:43
Оценка:
Здравствуйте, Mamut, Вы писали:

S>>Но суть в другом: не нужно работать с потоками ОС так же, как с легковесными процессами Erlang-а.

M>Почему?

потому что не обязательно для параллельных вычислений.
но в этой парадигме непонятно, как происходит обмен сообщениями между сущностями. и есть ли вообще акторо-подобные сущности.
...coding for chaos...
Re[15]: Почему Эрланг
От: BulatZiganshin  
Дата: 05.06.15 14:50
Оценка:
Здравствуйте, so5team, Вы писали:

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

S>Со 100K нитями в пуле.

так ты говорил как раз про потоки ОС. а здесь тестируешь нити своего SO5, т.е. как раз аналог легковесных потоков эрланга

S>Отработал, пруф. Было съедено где-то 7Gb RAM.


по 70 кб на нить? чё-то много...
Люди, я люблю вас! Будьте бдительны!!!
Re[9]: Mногопоточность: C++ vs Erlang vs другие
От: BulatZiganshin  
Дата: 05.06.15 14:51
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>1)Динамическая типизация -> неустранимые тормоза.


современные jit это решают
Люди, я люблю вас! Будьте бдительны!!!
Re[10]: Почему Эрланг
От: so5team https://stiffstream.com
Дата: 05.06.15 14:51
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


BZ>среди штук 5 акторных бибилотек. при этом ты ни словом не упомянул наиболее известные tbb/ppl/boost.coroutine


Boost.Coroutine -- это как раз низкоуровневая либа, при работе с которой нужно, как и при работе с threads вручную заниматься стартом/стопом и синхронизацией. Это не интересно. Интересно то, что над Coroutine надстраивают, та же Synca, тому пример.

tbb/ppl, как и недавно ставшая известной, hpx -- это инструменты для parallel computing. А так как, на мой взгляд, Erlang вообще не является инструментом для parallel computing, то и смысла упоминать tbb/ppl/hpx в разговоре про Erlang нет. Зато есть смысл говорить про инструменты для concurrent и distributed computing.

BZ> скаал что подход с потоками принципиально неприменим в C++.


Где я такое сказал?
Re[10]: Почему Эрланг
От: so5team https://stiffstream.com
Дата: 05.06.15 14:52
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Эрланг и не претендует.


Объясните это neFormal-у, а то он помрет и знать не будет.
Re[16]: Почему Эрланг
От: BulatZiganshin  
Дата: 05.06.15 14:54
Оценка:
Здравствуйте, Mamut, Вы писали:


S>>Наглядная демонстрация того, что даже 64-бит Windows Home на далеко не серверном железе позволяет запускать 100K нитей. Что уже про Linux-ы/Unix-ы говорить.


M>Хорошо. Запустил ты их. Дальше что? mutex.lock? WaitForThread? Ручной менеджмент потоков?


да то же самое, что в эрланге — длительные операции кооперируются с шедулером и уводят свои потоки в спячку, выставляя completion handler. нет только автоматическолго yield
Люди, я люблю вас! Будьте бдительны!!!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.