Существует также термин параллелизма.
Без каких-либо изменений в коде ваш haskell rts попытается использовать их для какого-то внутреннего процесса, но для использования в вашем приложении вы должны дать подсказку, сделанную par b (f a b)
что заставляет Haskell не слишком лениться при вычислении b
, даже если f
не потребует его для результата.
Одна из причин не делать этого для каждой функции, которая требует всех своих аргументов (как a+b
), синхронизация (планирование вычислений и ожидание результатов) дает некоторые накладные расходы, и вы, вероятно, не хотите тратить дополнительные тики на (2*3)+(3*4)
только потому, что вы можете вычислять умножения параллельно.И вы, вероятно, потеряете некоторые попадания в кеш или что-то вроде этого или оптимизации, которые выполняются, когда вы делаете это на одном процессоре (то есть вам все равно придется передавать результат с одного процессора на другой).
Конечнокод, который использует par
, уродлив, и когда вы сворачиваете список или некоторые другие структуры данных с легкими подэлементами, вы, вероятно, захотите вычислить некоторые куски этих легких элементов, чтобы убедиться, что накладные расходы / calc будут действительно небольшими.Чтобы решить эту проблему, вы можете посмотреть на параллельный .
. Существует также Data Parallel Haskell (DPH).
Если ваша программа больше связана с монадой ввода-вывода, чем вам определенно нужно многоизменения.См. forkIO
, Программная транзакционная память (STM) и многие другие из Категория параллелизма