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 предложил сборщик мусора (и распределитель) молодого поколения, который работал бы в кеше и позволял бы быстро перерабатывать память. С неизменяемыми объектами в куче и изменяемым стеком сборщик мусора становится очень простым конечным автоматом, который легко реализовать на оборудовании и позволяет более эффективно использовать относительно небольшой кеш.