OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 13 Июнь, 2021 03:26

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 86 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Вторник, 08 Декабрь, 2020 22:24 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 479
arlean1 писал(а):
"Особенность потоков эрланг в том, что они легковесные. Это значит, что они:

быстро стартуют и завершаются;
быстро переключаются;
потребляют мало памяти.

А я думал это про активные объекты А2. Не?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Вторник, 08 Декабрь, 2020 23:14 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1236
arlean1 писал(а):
Цитата:
...Изменяемый и не принадлежит одному потоку.

Вы все сравниваете с С++ ))) Для многоядерных архитектур он отстой.

Я не сравниваю. Я просто отметил, что не все задачи могут быть решены при любом одном подходе к параллельности. Ну т.е. можно, конечно, попробовать ввести сущность "мастер унитаза" со своим потоком. Тогда возникает вопрос, иммутабельны ли "данные", которыми обмениваются клиенты унитаза с мастером унитаза. У меня в их иммутабельности есть какие-то сомнения. Я не ругаю Эрланг в общем-то, просто призываю отказаться от надежды найти серебряную пулю в том, что касается параллельности. Нужен какой-то серебряный арсенал, а не одна пуля.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Вторник, 08 Декабрь, 2020 23:15 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1236
adimetrius писал(а):
arlean1 писал(а):
"Особенность потоков эрланг в том, что они легковесные. Это значит, что они:

быстро стартуют и завершаются;
быстро переключаются;
потребляют мало памяти.

А я думал это про активные объекты А2. Не?

Я так понимаю, что активные объекты A2 "ещё легковеснее", т.к. у них нет своей кучи. Но в этом же и минус их. Я, правда, честно сказать, не знаю, не создаётся ли тред на каждый активный объект, но я думаю, это не так сложно поменять в ядре. Можно спросить у Сергея, когда он будет выступать, хотя это наверняка где-то написано. Уж в кооперативной-то версии точно есть "легковесные" активные ообъекты.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Среда, 09 Декабрь, 2020 01:02 

Зарегистрирован: Среда, 31 Январь, 2018 19:54
Сообщения: 244
budden писал(а):
adimetrius писал(а):
arlean1 писал(а):
"Особенность потоков эрланг в том, что они легковесные. Это значит, что они:

быстро стартуют и завершаются;
быстро переключаются;
потребляют мало памяти.

А я думал это про активные объекты А2. Не?

Я так понимаю, что активные объекты A2 "ещё легковеснее", т.к. у них нет своей кучи. Но в этом же и минус их. Я, правда, честно сказать, не знаю, не создаётся ли тред на каждый активный объект, но я думаю, это не так сложно поменять в ядре. Можно спросить у Сергея, когда он будет выступать, хотя это наверняка где-то написано. Уж в кооперативной-то версии точно есть "легковесные" активные ообъекты.


Вот здесь более подробно написано об устройстве потоков в Erlang:
https://club.cnews.ru/blogs/entry/import_erlang_v_internetproektah_a49b

А в статье, которая цитировалсь ранее:
https://queue.acm.org/detail.cfm?id=3212479
Цитата:
SVE от ARM (Scalar Vector Extensions) - и аналогичная работа из Berkeley 4 - дает еще один взгляд на лучший интерфейс между программой и оборудованием. Обычные векторные единицы предоставляют векторные операции фиксированного размера и ожидают, что компилятор попытается сопоставить алгоритм с доступным размером единицы. В отличие от этого, интерфейс SVE ожидает, что программист описывает степень доступного параллелизма, и полагается на оборудование, чтобы сопоставить его с доступным количеством исполнительных блоков. Использовать это из C сложно, потому что автовекторизатор должен вывести доступный параллелизм из циклических структур. Сгенерировать код для него из операции сопоставления в функциональном стиле тривиально: длина сопоставленного массива - это степень доступного параллелизма.

Кеши большие, но их размер - не единственная причина их сложности. Протокол согласования кэша - одна из самых сложных частей современного ЦП, которую нужно сделать как быстрой, так и правильной. Большая часть сложности возникает из-за поддержки языка, в котором данные должны быть как общими, так и изменяемыми, как само собой разумеющееся. Рассмотрим для сравнения абстрактную машину в стиле Erlang, где каждый объект является либо локальным для потока, либо неизменяемым (в Erlang есть упрощение даже для этого, где есть только один изменяемый объект на поток). Протокол согласованности кэша для такой системы будет иметь два случая: изменяемый или совместно используемый. Программный поток, переносимый на другой процессор, потребует явной недействительности кэша, но это относительно необычная операция.

Неизменяемые объекты могут еще больше упростить кеширование, а также удешевить некоторые операции. Проект Sun Labs Максвелл отметил, что объекты в кэше и объекты, которые будут размещены в молодом поколении, имеют почти одинаковый набор. Если объекты мертвы до того, как их нужно удалить из кеша, то никогда не записывать их обратно в основную память можно сэкономить много энергии. Project Maxwell предложил сборщик мусора (и распределитель) молодого поколения, который работал бы в кеше и позволял бы быстро перерабатывать память. С неизменяемыми объектами в куче и изменяемым стеком сборщик мусора становится очень простым конечным автоматом, который легко реализовать на оборудовании и позволяет более эффективно использовать относительно небольшой кеш.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Среда, 09 Декабрь, 2020 12:47 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4519
Откуда: Россия, Орёл
В Эрланге многое проще организуется ввиду того, что он виртуальную машину из себя представляет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Четверг, 10 Декабрь, 2020 01:19 

Зарегистрирован: Среда, 31 Январь, 2018 19:54
Сообщения: 244
А вот такой подход пригодится для Оберона?
https://askdev.ru/q/erlang-na-mnogoyade ... re-191937/
Цитата:
поведение по умолчанию Erlang исторически заключалось в запуске одного планировщика, который в основном является родным потоком ОС, который выбирает задачи Erlang для запуска из очереди. С появлением многоядерных и многопроцессорных систем среда выполнения была расширена, чтобы воспользоваться преимуществами. Запуск среды выполнения с помощью -smp enabled заставит среду выполнения создать несколько планировщиков, обычно по одному на логический процессор. Вы можете вручную указать количество планировщиков с -S флаг например -S 16.

это описано в Erlang Run-Time System Справочное Руководство.

более глубокое обсуждение поддержки SMP можно найти в этой теме.


Я должен также отметить, что, начиная с R12B, SMP включен по умолчанию на платформах, которые его поддерживают (эквивалентно -smp auto флаг). Если вам интересно узнать о вашей собственной среде выполнения, приведенная ниже цитата из потока обсуждения будет интересно:

"... вы можете увидеть, что было выбрано в первой строке распечатки из команда "Ерл". Например. Erlang (BEAM) emulator версия 5.6.4 [источник] [smp:4] [asynch-потоки:0] .....

"[smp:4]" выше говорит, что SMP VM запущен и с 4 планировщиками".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Четверг, 10 Декабрь, 2020 01:41 

Зарегистрирован: Среда, 31 Январь, 2018 19:54
Сообщения: 244
https://itc.ua/articles/yazyk_erlang_i_ ... rov_26721/
Цитата:
История знает много примеров решений, которые опередили свое время и, не получив признания современности, отправлялись пылиться на полку. Сегодня IT-индустрия переживает очередной виток развития, вызванный переходом к многоядерным микропроцессорам, и сталкивается с новыми проблемами – например, рост количества ядер центрального процессора совсем не приводит к пропорциональному увеличению скорости исполнения приложений на нем. Быть может, наилучшее решение этой проблемы следует искать не в новых методах оптимизации прикладных программ, а в радикальной смене парадигмы программирования, оживив ранее забытые проекты?

На самом деле системы на Erlang вовсе не масштабируемые и не надежные. Это системы на Java такие. Системы на Erlang просто непробиваемы как скалы.

Вячеслав Ахмечет, Functional Programming For The Rest of Us


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Четверг, 10 Декабрь, 2020 14:33 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 975
Откуда: Казань
В предыдущих Oberon Day я рассказывал про то, какая есть простая модель параллельности. Она масштабируемая: может работать с любым количеством потоков. Простая для понимания, что соотносится с Oberon Way. И ее по сути можно реализовать на любом Обероне, если доработать сборщик мусора. Если выделять динамическую память в параллельной программе не требуется, то можно и сборщик мусора не дорабатывать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Четверг, 10 Декабрь, 2020 17:36 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1236
А это интерес практический или просто в рамках общей дискуссии?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Четверг, 10 Декабрь, 2020 21:32 

Зарегистрирован: Среда, 31 Январь, 2018 19:54
Сообщения: 244
budden писал(а):
А это интерес практический или просто в рамках общей дискуссии?

Практический.
+ Если добавить к вашему списку преимуществ:
Rifat писал(а):
... есть простая модель параллельности. Она масштабируемая: может работать с любым количеством потоков. Простая для понимания, что соотносится с Oberon Way.

Есть, конечно, пример с библиотекой mpich, но в её внутренности не влезешь. Пробовал с ней работать, но успехи не такие впечатляющие, как ожидал.


Последний раз редактировалось arlean1 Четверг, 10 Декабрь, 2020 22:24, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Четверг, 10 Декабрь, 2020 21:48 

Зарегистрирован: Среда, 31 Январь, 2018 19:54
Сообщения: 244
Rifat писал(а):
В предыдущих Oberon Day я рассказывал про то, какая есть простая модель параллельности. Она масштабируемая: может работать с любым количеством потоков. Простая для понимания, что соотносится с Oberon Way. И ее по сути можно реализовать на любом Обероне, если доработать сборщик мусора. Если выделять динамическую память в параллельной программе не требуется, то можно и сборщик мусора не дорабатывать.

ссылку не уточните?

А что надо доделать в сборщике мусора?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Четверг, 10 Декабрь, 2020 22:38 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 975
Откуда: Казань
arlean1 писал(а):
ссылку не уточните?

https://www.youtube.com/watch?v=M0uvLtP7Gjg
https://www.youtube.com/watch?v=IV3Ewv82Zq4

arlean1 писал(а):
А что надо доделать в сборщике мусора?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Пятница, 11 Декабрь, 2020 03:49 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1236
В целом я хочу сделать такое в ЯОС. В "активном обероне" уже есть хорошие предпосылки для этого. Сделать, кажется, можно. Но проект ЯОС начинается с перевода на русский язык, этот этап далёк от завершения, требует больших трудозатрат, а для многих неприемлемо использовать русский язык для программирования. Можно вернуться к вопросу, когда (если) перевод удастся достаточно продвинуть, чтобы было возможно приступить к такой задаче. Кому русский язык неприемлем или некогда ждать - можете сами взять A2 и покопаться в нём.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Суббота, 12 Декабрь, 2020 10:04 

Зарегистрирован: Среда, 31 Январь, 2018 19:54
Сообщения: 244
Rifat писал(а):
arlean1 писал(а):
ссылку не уточните?

https://www.youtube.com/watch?v=M0uvLtP7Gjg
https://www.youtube.com/watch?v=IV3Ewv82Zq4

arlean1 писал(а):
А что надо доделать в сборщике мусора?

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

Спасибо, Рифат!
В одном из докладов вы говорите, что начали реализацию по своей программе. Планируете что-то разместить на https://oberon.org/ ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Суббота, 12 Декабрь, 2020 17:43 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1236
Кстати, надо вернуться к вопросу об унитазе. Как в такой программе, где у каждого потока своя куча, работать с журналом отладки, например? Видимо, это стоит сделать в отдельной теме, если есть желание, и даже не в этом форуме.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Суббота, 12 Декабрь, 2020 19:01 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1371
budden писал(а):
Кстати, надо вернуться к вопросу об унитазе. Как в такой программе, где у каждого потока своя куча, работать с журналом отладки, например?

Совсем же просто: чья куча, тот и смыл. А вот если куча общая, поди договорись.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Суббота, 12 Декабрь, 2020 19:15 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1236
Т.е. если я хочу написать в общий журнал, я копирую все свои данные в буфер обмена и отправляю их сообщением менеджеру системного журнала. И возникает ряд проблем, например, вывод сообщения подразумевает обмен цепочкой сообщений, а не одним сообщением, если текст не влезает в буфер, разрыв сообщений. Дальше может возникнуть нарушение последовательности событий, подвисание всей системы на время вывода сообщения от одного потока, разрыв сообщения, дедлок с участием менеджера лога, отсутствие гарантии доставки сообщения и много чего другого интересного. Или же файловая система без динамической памяти - тоже не сахар.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Суббота, 12 Декабрь, 2020 22:32 

Зарегистрирован: Среда, 31 Январь, 2018 19:54
Сообщения: 244
budden писал(а):
Т.е. если я хочу написать в общий журнал, я копирую все свои данные в буфер обмена и отправляю их сообщением менеджеру системного журнала. И возникает ряд проблем, например, вывод сообщения подразумевает обмен цепочкой сообщений, а не одним сообщением, если текст не влезает в буфер, разрыв сообщений. Дальше может возникнуть нарушение последовательности событий, подвисание всей системы на время вывода сообщения от одного потока, разрыв сообщения, дедлок с участием менеджера лога, отсутствие гарантии доставки сообщения и много чего другого интересного. Или же файловая система без динамической памяти - тоже не сахар.

Все сообщения в модели Рифата - это ведь все сообщения, которые передаются со всех потоков - вы их имееете в виду?
- здесь возможно просто переполнение буфера. Если это возможно, то нужно предусмотреть режим отладочной работы, когда при приближении к "барьеру" переполнения буфера, менеджер системного журнала, посылает сообщения о приостановке всем потокам, которые шлют сообщения - остановки до момента освобождения буфера (кэша ). Это, конечно, замедлит работу, но зато будет надёжно и выявит поток, который продолжает слать сообщения .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Воскресенье, 13 Декабрь, 2020 01:12 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1236
Я имею в виду лишь то, что лог отладки не будет работать достаточно хорошо в этой модели, т.к. отправитель будет отделён от получаетеля. А как это на самом деле надо организовывать - я не знаю, с таким способом организации многопоточности не сталкивался, на эрланге не писал. Один раз почти столкнулся, но дойти до конца не довелось.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оберон против Си и Си++, часть 2
СообщениеДобавлено: Воскресенье, 13 Декабрь, 2020 20:17 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 975
Откуда: Казань
По поводу журнала. Если несколько параллельных компонентов будут писать в один и тот же журнал, то, конечно, они будут смешаны в этом журнале. Но, если все это будет аккуратно записано, то почему бы и нет, например:
Время1;Компонент1;Сообщение
Время2;Компонент2;Сообщение
Время3;Компонент1;Сообщение
Время4;Компонент3;Сообщение
и т.д.
По поводу переполнения буфера. В простейшем случае никакого переполнения нет, так как и буфера нет. Посылка сообщения происходит только в том случае, если один компонент хочет послать сообщение, а другой готов принять сообщение. Если добавить буфер, то можно сгладить некоторые моменты, когда одному компоненту нужно быстро записать сообщение и продолжить работу, а компонент, который пишет в журнал занят записью другого сообщения. При этом буфер будет работать как отдельный компонент параллельной программы.
Может быть проблема, если сообщение настолько большое, что оно не вмещается в пересылаемое сообщение, тогда надо пересылать это сообщение несколько раз. И на этот случай надо добавить некоторые адреса компонентам, чтобы в этом случае журнал ожидал продолжения сообщения только от заданного компонента, иначе части сообщений перемешаются.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 86 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2021, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB