Являются ли концепции синхронизации и состояния гонки только для модели с общей памятью?
В модели с распределенной памятью, когда процессы взаимодействуют способами, отличными от общей памяти, применяются ли условия синхронизации и гонки?
Спасибо.
Являются ли концепции синхронизации и состояния гонки только для модели с общей памятью?
В модели с распределенной памятью, когда процессы взаимодействуют способами, отличными от общей памяти, применяются ли условия синхронизации и гонки?
Спасибо.
Условия гонки по-прежнему случаются в распределенных системах.
Согласно Википедии, "преимущество распределенной памяти заключается в том, что она исключает условия гонки, [...]». Я не согласен с этим утверждением в его нынешнем виде. Вот мое объяснение, почему:
Если вы не взаимодействуете между процессами, это тривиальная проблема в обеих моделях; просто не трогайте ресурсы друг друга.
Если у вас нет асинхронной сети, ваша производительность сильно пострадает, поэтому почти все процессоры используют асинхронные сети внутри и снаружи.
Если вы каким-то образом асинхронно взаимодействуете между процессами, будь то общая память, передача сообщений или что-то еще, будут системы, в которых могут возникнуть условия гонки.
Предположим, что A отправляет «let x = 4» в B.
Одновременно с этим C отправляет «let x = 5» в B.
Равно ли x 4
или 5
после обработки обоих сообщений?
Несмотря на то, что у вас никогда не будет состязаний на уровне памяти, т.е. потоков, переписывающих сообщения друг друга, или подобных ужасных вещей, которые могут произойти с общей памятью, приложение все равно может страдать от состязаний на более высоком уровне абстракции.