Re: Эрланг и все-все-все (на самом деле, не совсем)
От: Mr.Delphist  
Дата: 29.06.15 12:34
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Давайте посмотрим, что у нас считается state of the art в некоторых современных языках. Для тех, кто в наглухо забронированном танке. Это то, что доступно в языках на уровне стандартов и стандартных библиотек:


M>- С++. Стандарт С++11. http://en.cppreference.com/w/cpp/thread Уровень примерно на уровне WinAPI середины 90-х. Потоки, мьютексы. Ну еще есть futures.

M>- Python. https://docs.python.org/2/library/threading.html#module-threading и https://docs.python.org/3/library/threading.html#module-threading. То же самое. Потоки, мьютексы. Ну или смешные костыли в виде запуска отдельного ОС-процесса
M>- Java. Возьмем ссылку на википедию. https://en.wikipedia.org/wiki/Java_concurrency Все то же. Потоки и мьютексы. Плюс возможно процессы ОСи
M>- C#? Objective-C? Ruby? Php бггг? кто там еще есть в индексе? Все то же самое и одно и то же.

M>(понятно, что я могу ошибаться, или ошибаться в деталях)


Подброшу деталей на вентилятор, уж не серчайте:

В общем, многопоточность давно уже не требует ручного управления потоками на большом числе языков. Просто инерция мышления загоняет большинство народа в старые рамки: для легковесных потоков есть Эрланг, и только он.
Re[2]: Эрланг и все-все-все (на самом деле, не совсем)
От: Mamut Швеция http://dmitriid.com
Дата: 29.06.15 12:36
Оценка:
MD>В общем, многопоточность давно уже не требует ручного управления потоками на большом числе языков. Просто инерция мышления загоняет большинство народа в старые рамки: для легковесных потоков есть Эрланг, и только он.

Что по-твоему является управлением потоками?


dmitriid.comGitHubLinkedIn
Re[11]: Эрланг и все-все-все (на самом деле, не совсем)
От: Evgeny.Panasyuk Россия  
Дата: 29.06.15 12:36
Оценка:
Здравствуйте, neFormal, Вы писали:

EP>>* При параллельном программировании главная цель состоит в том, чтобы как можно быстрее получить результат

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

Густо-негусто, но стартовый тезис это разбивает в пух и прах:

M>Тезис топика: Для удобного использования многоядерности и вообще распараллеливания чего бы то ни было, нужно иметь, по сути, одну вещь: поддержку этого языком. Когда все, что язык предоставляет — это появившиеся в 2011-м стандарте thread'ы, то далеко на нем не уедешь. Во всяком случае пока умные люди не напишут вокруг всего этого костыли и библиотеки. Потому что первый же залетный mutex.lock убъет любую многопоточность и многоядерность.

TBB, MPI, MapReduce и т.п. — отлично позволяют решать параллельные задачи без поддержки со стороны языка.
Re[13]: Why?
От: BulatZiganshin  
Дата: 29.06.15 12:46
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Какие инструменты предлагает нам подавляющее большинство современных языков программирования для решения этих двух вопросов?


M>У тебя есть пробелмы с пониманием написанного? Нет? Хорошо. Ответь на поставленный в конце вопрос.


никаких. можно ли из этого сделать какие-либо выводы в отношении конкретного языка, ну скажем эрланга?
Люди, я люблю вас! Будьте бдительны!!!
Re[11]: Эрланг и все-все-все (на самом деле, не совсем)
От: BulatZiganshin  
Дата: 29.06.15 12:51
Оценка: +1
Здравствуйте, neFormal, Вы писали:

EP>>* При параллельном программировании главная цель состоит в том, чтобы как можно быстрее получить результат

EP>>* При конкурентом программировании сама задача решается на порядки проще

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


разница в целях. при параллельном программировании целью является более быстрая программа чем однопоточная. поэтому интерпретаторы здесь не канают, и поэтому эрланга нету на gpu, и его smp вариант появился не сразу (или до сих пор не появился?)

в конк. пр. быстродействие олднопоточного варианта нас вполне устроит, задача состоит в упрощении описания алгоритма. поэтому лучшим средством здесь яляются сопрограммы, выполняемые в рамках одного потока ОС — либо изолированные процессы с обменом сообщениями
Люди, я люблю вас! Будьте бдительны!!!
Re[12]: Эрланг и все-все-все (на самом деле, не совсем)
От: neFormal Россия  
Дата: 29.06.15 13:00
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Густо-негусто, но стартовый тезис это разбивает в пух и прах:


за исключением проблемы с локами.
но хорошо, что хоть к 11му уровню мы добрались до сути претензий
...coding for chaos...
Re[12]: Эрланг и все-все-все (на самом деле, не совсем)
От: neFormal Россия  
Дата: 29.06.15 13:06
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

BZ>разница в целях. при параллельном программировании целью является более быстрая программа чем однопоточная. поэтому интерпретаторы здесь не канают, и поэтому эрланга нету на gpu,


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

BZ>и его smp вариант появился не сразу (или до сих пор не появился?)


давно существует.
...coding for chaos...
Re[4]: Эрланг и все-все-все (на самом деле, не совсем)
От: BulatZiganshin  
Дата: 29.06.15 13:15
Оценка: +1
Здравствуйте, Философ, Вы писали:

Ф>Всё было бы просто, если бы задачи были совсем независимы, по данным, но это не про реальную жизнь: в реальной жизни независимых задач крайне мало, и с ними всё решается достаточно просто, например, с помощью Parallel.ForEach(), который в составе параметров принимает в том числе и CancellationToken.


Ф>Повторюсь: убивать поток — плохая идея. Даже с процессом может плохо получиться:

Ф> при грубом завершении потока тебе нужно как минимум файлы закрыть (и, кстати, закрывать ли — тот ещё вопрос), а ещё лучше — объекты синхронизации в правильное состояние вернуть — вот это уже совсем не простая задача, которая в общем случае не решается.

Ф>Для прекращения выполнения кода существуют другие методы. Самый удачный, на мой взгляд — реакция самой задачи на CancellationToken.


Ф>Может быть ты знаешь какую-то магию, которую я не знаю в этой области? Как эта проблема решается в Erlang'е?


потоки должны быть изолированы по данным. в true FP языках с их once-assign это решается автоматически, в других — при минимальных усилиях со стороны программиста

правда, есть ещё всякие memory buffers & files, они могут либо принадлежать специальному потоку, тогда алгоритм выглядит так — убиваем использующие их потоки, затем даём ему команду освободить ресурсы; либо поток должен завершаться структурированно и тогда их можно как обычно освободить обычным деструктором в потоке-владельце

далее, поток можно убить либо низкоуровнево — просто перестать отдавать ему тайм-слайсы, либо структурированно — возбудить в нём исключение. в эрланге и других интерпретаторах можно просто вставить проверку в цикл интерпретации, когда система находится в заведомо консистентном состоянии. в ghc, нативном компиляторе — в момент выделения памяти, благо что в once-assign languages она распределяется постоянно. в результате этой проверки в ghc возбуждается асинхронное исключение, которое дальше обрабатывается обычным структурированным образом

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

наконец, в С++ можно структурированно убивать потоки, возложив весь message passing между ними на специально написанную библиотеку, такую как tbb/ppl. в ней GetMessage()/PutMessage() должен просто возбуждать исключение при необходимости убийства потока, таким образом любые проблемы в других потоках не отразятся на нашем — он просто доработает до очередной точки синхронизации самостоятельно и дальше умрёт если что-то у соседей пошло не так. я сейчас использую такой подход (правда с своей реализацией вместо tbb/ppl) и вроде всё работает
Люди, я люблю вас! Будьте бдительны!!!
Re[13]: Эрланг и все-все-все (на самом деле, не совсем)
От: Evgeny.Panasyuk Россия  
Дата: 29.06.15 13:16
Оценка:
Здравствуйте, neFormal, Вы писали:

EP>>Густо-негусто, но стартовый тезис это разбивает в пух и прах:

F>за исключением проблемы с локами.

Какой проблемы, и с какими именно локами?

F>но хорошо, что хоть к 11му уровню мы добрались до сути претензий


Буквально с первых страниц этой темы (подобное было и в предыдущей):

https://rsdn.ru/forum/flame.comp/6091922.1


S>В-третьих, вы упорно не желаете признавать разницу между parallel computing и concurrent computing, даже не смотря на то, что вам на это неоднократно указывали. И если достоинства Erlang-а в области concurrent computing мало у кого вызывают сомнения, то вот применимость Erlang-а в parallel computing нужно доказывать и доказывать. Полагаю, для специализирующихся в этой области такие инструменты, как OpenMP и MPI, доступные для C, С++ и Fortran практически “из коробки”, перевешивают все, что придется вручную городить на Erlang-е и OTP. Тем не менее, вы продолжаете утверждать, что Erlang хорош для параллельности и многозадачности вообще, без оглядки на специализацию.

https://rsdn.ru/forum/flame.comp/6092191.1


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

_>Это как раз и есть твоя основная ошибка. Ты сводишь огромное число разных задач многопоточного программирования к одному очень узкому варианту. И найдя для него неплохо решение, почему-то распространяешь его на всё богатство вариантов многопоточных задач. А это полный бред. К примеру обычному десктопному приложению (1 UI поток и парочка фоновых) или числодробилкам (количество потоков равно числу ядер процессора) твои тысячи лёгких потоков не просто не полезны, а даже вредны — тут могут быть эффективнее даже банальные системные потоки. Т.е. если бы ты проводил все свои утверждения выше для узкой ниши полезного применения Эрланга, то думаю никто и стал бы с тобой спорить. Но ты же замахиваешься на многопоточность вообще (во всех её проявлениях) и соответственно получается что несёшь бред, т.к. тут во многих отдельных нишах не то что другие языки догоняют Эрланг, а как раз наоборот, он во многих случаях будет откровенно плохим решением.

Re[14]: Why?
От: Mamut Швеция http://dmitriid.com
Дата: 29.06.15 13:17
Оценка:
M>>Какие инструменты предлагает нам подавляющее большинство современных языков программирования для решения этих двух вопросов?

M>>У тебя есть пробелмы с пониманием написанного? Нет? Хорошо. Ответь на поставленный в конце вопрос.


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


Можно. Берешь в руки стартовый топик и перечитываешь.


dmitriid.comGitHubLinkedIn
Re[13]: Эрланг и все-все-все (на самом деле, не совсем)
От: ELazin http://rsdn.ru/forum/prj/6225353.1
Автор: ELazin
Дата: 26.10.15
Дата: 29.06.15 13:20
Оценка:
F>за исключением проблемы с локами.

А что еще за проблема с локами? Может кто-то просто не умеет ими пользоваться?
Re[13]: Эрланг и все-все-все (на самом деле, не совсем)
От: ELazin http://rsdn.ru/forum/prj/6225353.1
Автор: ELazin
Дата: 26.10.15
Дата: 29.06.15 13:22
Оценка:
F>да это понятно. просто терминология не очень.
F>как будто конкурентность должна быть без параллельности.

не должна а может, если бы Erlang мог работать только на одном ядре им все равно пользовались бы
Re[15]: Why?
От: BulatZiganshin  
Дата: 29.06.15 13:25
Оценка:
Здравствуйте, Mamut, Вы писали:

M>>>Какие инструменты предлагает нам подавляющее большинство современных языков программирования для решения этих двух вопросов?


M>>>У тебя есть пробелмы с пониманием написанного? Нет? Хорошо. Ответь на поставленный в конце вопрос.


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


M>Можно. Берешь в руки стартовый топик и перечитываешь.


хорошо, а как насчёт C++, java, c#, ruby, ghc и любого другого языка из первой 20-ки? какие ты выводы делаешь из того, что они не относятся к этому "подавляющему большинству" языков?
Люди, я люблю вас! Будьте бдительны!!!
Re[16]: Why?
От: Mamut Швеция http://dmitriid.com
Дата: 29.06.15 13:26
Оценка:
M>>>>Какие инструменты предлагает нам подавляющее большинство современных языков программирования для решения этих двух вопросов?
M>>>>У тебя есть пробелмы с пониманием написанного? Нет? Хорошо. Ответь на поставленный в конце вопрос.
BZ>>>никаких. можно ли из этого сделать какие-либо выводы в отношении конкретного языка, ну скажем эрланга?

M>>Можно. Берешь в руки стартовый топик и перечитываешь.

BZ>хорошо, а как насчёт C++, java, c#, ruby, ghc и любого другого языка из первой 20-ки? какие ты выводы делаешь из того, что они не относятся к этому "подавляющему большинству" языков?

Они прекрасно относятся к подавляющему большинству. Можешь еще раз ответить на поставленный вопрос.


dmitriid.comGitHubLinkedIn
Re[14]: Эрланг и все-все-все (на самом деле, не совсем)
От: neFormal Россия  
Дата: 29.06.15 13:27
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>>>Густо-негусто, но стартовый тезис это разбивает в пух и прах:

F>>за исключением проблемы с локами.
EP>Какой проблемы, и с какими именно локами?

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

EP>Буквально с первых страниц этой темы (подобное было и в предыдущей):


некоторое подмножество задач многопоточности можно решить и классическими методами.
кто бы спорил...
тем не менее "огромное число разных задач многопоточного программирования" осталось нераскрытым.
...coding for chaos...
Re[14]: Эрланг и все-все-все (на самом деле, не совсем)
От: neFormal Россия  
Дата: 29.06.15 13:28
Оценка: +1
Здравствуйте, ELazin, Вы писали:

F>>за исключением проблемы с локами.

EL>А что еще за проблема с локами? Может кто-то просто не умеет ими пользоваться?

это проблема технологии в конце концов
...coding for chaos...
Re[13]: Эрланг и все-все-все (на самом деле, не совсем)
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.06.15 13:28
Оценка:
Здравствуйте, neFormal, Вы писали:

BZ>>разница в целях. при параллельном программировании целью является более быстрая программа чем однопоточная. поэтому интерпретаторы здесь не канают, и поэтому эрланга нету на gpu,


F>да это понятно. просто терминология не очень.

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

Это два независимых подхода, которые дополняют друг друга.

Просто когда у некоторых персонажей в руках Эрлангмолоток , то им все кажется гвоздями.
Re[14]: Эрланг и все-все-все (на самом деле, не совсем)
От: neFormal Россия  
Дата: 29.06.15 13:29
Оценка:
Здравствуйте, ELazin, Вы писали:

F>>как будто конкурентность должна быть без параллельности.

EL>не должна а может

по ходу обсуждения их чуть ли не противопоставляют.
а так да — может, но не должна.

EL>если бы Erlang мог работать только на одном ядре им все равно пользовались бы


разве только в телекоме.
...coding for chaos...
Re[15]: Эрланг и все-все-все (на самом деле, не совсем)
От: ELazin http://rsdn.ru/forum/prj/6225353.1
Автор: ELazin
Дата: 26.10.15
Дата: 29.06.15 13:34
Оценка:
F>это проблема технологии в конце концов

это не ответ на вопрос
Re[14]: Эрланг и все-все-все (на самом деле, не совсем)
От: Mamut Швеция http://dmitriid.com
Дата: 29.06.15 13:34
Оценка:
I>Просто когда у некоторых персонажей в руках Эрлангмолоток , то им все кажется гвоздями.

Тут пока что некоторые персонажи не могут понять, что такое управлять потоками/процессами/задачми, а все ту да же — «ненужно».


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