Я нахожусь на этапе разработки языка программирования, в настоящее время думаю о аспектах параллелизма. Мне нужно выяснить модель согласованности , т. Е. Как данные обрабатываются параллельными процессами, запрограммированными на этом языке.
Есть два важных критерия:
- Я предпочитаю простоту использования, а не производительность, если модель согласованности обеспечивает хорошее масштабирование,
- Я не могу использовать модель согласованности, которая требует блокировки или динамического выделения памяти.
Моими двумя кандидатами сейчас являются неблокирующая программная транзакционная память на одной стороне и копирование семантики передачи сообщений без совместного использования a la Erlang.
Меня особенно беспокоит простота использования, поэтому я представлю основные аргументы, которые у меня есть в отношении каждой из этих двух моделей.
В случае STM пользователь должен понимать, какие члены класса должны видоизменяться атомарно, и правильно разделять атомарные разделы кода. Они должны быть написаны так, чтобы их можно было повторять неопределенное количество раз, они не могут выполнять какой-либо ввод-вывод, могут не вызывать некоторые посторонние функции и т. Д. Я считаю, что это не так просто для неопытного программиста.
Параллельный беспроигрышный стиль в стиле Erlang привлекателен, но есть одна загвоздка: процессы в реальном времени не могут копировать объекты, которые они отправляют, потому что они не могут выполнять какое-либо выделение памяти, и поэтому объекты должны «перемещаться» из одного процесса к другому через очереди. Пользователь должен знать, что если один процесс реального времени имеет две ссылки на объект, обе эти ссылки будут очищены, если он отправит объект другому процессу. Это немного похоже на слабые указатели, которые могут или не могут быть нулевыми в любой точке использования: это может быть удивительно.
Я склоняюсь ко второй модели, потому что она кажется более понятной и, естественно, распространяется на распределенные системы.
Что вы рекомендуете?
- Неблокирующая программная транзакционная память?
- Параллельность в стиле Эрланга с трудностями ограничений в реальном времени?
- Что-то еще, что я не учел?