Почему параллельный haskell недетерминирован, а параллельные примитивы haskell (par и pseq) детерминированы? - PullRequest
19 голосов
/ 21 декабря 2011

Не совсем понимаю детерминизм в контексте параллелизма и параллелизма в Хаскеле. Некоторые примеры будут полезны. Спасибо

Ответы [ 2 ]

25 голосов
/ 21 декабря 2011

При работе с чистыми значениями порядок оценки не имеет значения. По сути, это то, что делает параллелизм : параллельная оценка чистых значений. В отличие от чистых ценностей, порядок обычно имеет значение для действий с побочными эффектами. Запуск действий одновременно называется одновременность .

В качестве примера рассмотрим два действия putStr "foo" и putStr "bar". В зависимости от порядка, в котором оцениваются эти два действия, выводом является либо «foobar», «barfoo», либо любое промежуточное состояние. Выходные данные неопределенные , поскольку это зависит от конкретного порядка оценки.

В качестве другого примера рассмотрим два значения sum [1..10] и 5 * 3. Независимо от порядка, в котором эти двое оцениваются, они всегда сводятся к одним и тем же результатам. Этот детерминизм является тем, что вы обычно можете гарантировать только с чистыми значениями.

24 голосов
/ 21 декабря 2011

Параллелизм и параллелизм - это две разные вещи.

Параллелизм означает, что несколько потоков взаимодействуют недетерминированно.Например, у вас может быть чат-сервер, где каждый клиент обрабатывается одним потоком.Недетерминизм важен для системы, которую вы пытаетесь смоделировать.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...