The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск языка программирования Rust 1.54"
Отправлено Anonnnym, 30-Июл-21 15:06 
>> управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора
> lockfree без GC, или при чем тут упоминание параллелизма?

Судя по дискуссии, меня не совсем правильно поняли. Я не говорил о GC таком как в Java, C# или D, который прибирает за пользователем всю выделенную память. Я говорил о GC для lockfree структур.

Изначально процитированная часть (не полная) говорит о том, что в rast высокая скорость выполнения параллельных заданий достигается без использования GC и runtime. Тут я предположил 2 вещи о которых может вестись речь: выделение/освобождение памяти и lockfree структуры. Для первого сообщение в новости исключает кастомные аллокаторы, а без них мы не можем выделить памяти без блокировок, так как ходим в ядро. По этому я и спросил только про lockfree, т.к. мне не совсем понятно как можно организовать lockfree-структуру без сборщика мусора.

На пример возьмем односвязный список с 2мя полями - value и next, где next - указатель на следующий элемент, а value - значение, которое нам в примере неинтересно.

Для добавления элемента в список нам нужно создать его - записав значение и nullptr в next, после чего указатель на наш элемент надо добавить в конец списка, для этого через CAS сравниваем и заменяем nullptr поля next последнего элемента списка на указатель на наш новый элемент. Т.к. пока мы искали последний элемент списка он мог перестать быть последним, данная операция выполняется в бесконечном цикле.

Для удаления можно попробовать поступить так же, но если мы после удаления элемента из списка (замена указателя на него nullptr), удалим сам элемент (вызовем delete), то мы можем уронить приложение обращением к освобожденной памяти, из-за того, что другой поток обратился к элементу перед удалением, а прочитал поле из него уже после удаления.

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

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру