Parallel processing 为什么函数式语言易于并行化?

Parallel processing 为什么函数式语言易于并行化?,parallel-processing,functional-programming,Parallel Processing,Functional Programming,还有另一个标题为“函数并行编程语言:F#vs Haskell”的线程,在该线程中,OP声明“函数编程具有不可变的数据结构,并且没有本质上适合并行编程的副作用。” Jon Harrop在他的回答中指出,“并行性仅仅是关于性能的,而纯度会降低性能。因此,如果您的目标是获得良好的性能,那么纯粹的函数式编程不是一个好的起点。” 我不打算讨论函数式编程是否真的提高了性能;这似乎是一个执行问题。我感兴趣的是概念层面: “不可变数据”和“无副作用”都是易于并行化所必需的吗?它们是充分条件还是必要条件?它们是否

还有另一个标题为“函数并行编程语言:F#vs Haskell”的线程,在该线程中,OP声明“函数编程具有不可变的数据结构,并且没有本质上适合并行编程的副作用。”

Jon Harrop在他的回答中指出,“并行性仅仅是关于性能的,而纯度会降低性能。因此,如果您的目标是获得良好的性能,那么纯粹的函数式编程不是一个好的起点。”

我不打算讨论函数式编程是否真的提高了性能;这似乎是一个执行问题。我感兴趣的是概念层面:

“不可变数据”和“无副作用”都是易于并行化所必需的吗?它们是充分条件还是必要条件?它们是否比保证数据独立性或交换性更为必要?请参考学术文献

“不可变数据”和“无副作用”都是易于并行化所必需的吗

可以从另一个线程观察到的数据突变是一种副作用,因此没有副作用就足够了。:)

它们是充分条件还是必要条件

什么条件

这些不是采用并行性的先决条件。所说的是,它使事情变得更容易

看,这就像有人说:Java天生适合于避免缓冲区溢出的编程,因为它没有(可操作的)指针

这并不意味着你不能用C语言编写一个不会溢出缓冲区的程序,只是这样做比较困难。

1。在另一篇文章“什么是函数式、声明式和命令式编程?”中,Shelby Moore III断言“引用透明性”是比“无副作用”更精确的术语,外部值的不变性是引用透明性要求的子集。因此,我想这可以作为并行化的一个充分条件。至于“条件”,我想到的是类似于Bernstein的条件,这些条件被建立为数据独立性的充分条件。如果两个计算是数据独立的,那么它们可以并行化。也就是说,如果程序根据条件进行并行化,Bernstein条件(以及引用透明性)可以保证程序的正确性。但由于Bernstein的检验不是必要条件,因此在不满足检验的情况下并行计算的程序可能仍然是正确的。