haskell - 为什么并发 Haskell 是非确定性的,而并行 Haskell 原语(par 和 pseq)是确定性的?

标签 haskell concurrency parallel-processing deterministic non-deterministic

不太理解 Haskell 中并发和并行上下文中的决定论。一些例子会有所帮助。 谢谢

最佳答案

处理纯值时,求值顺序并不重要。这本质上就是并行性的作用:并行评估纯值。与纯值相反,顺序通常对于具有副作用的操作很重要。同时运行操作称为并发

作为示例,考虑两个操作 putStr "foo"putStr "bar"。根据评估这两个操作的顺序,输出是“foobar”、“barfoo”或两者之间的任何状态。输出不确定,因为它取决于特定的评估顺序。

再举一个例子,考虑两个值 sum [1..10]5 * 3。无论这两者的评估顺序如何,它们总是会减少到相同的结果。这种决定论通常只能用纯值来保证。

关于haskell - 为什么并发 Haskell 是非确定性的,而并行 Haskell 原语(par 和 pseq)是确定性的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8582580/

相关文章:

java - 使用 AtomicBoolean 控制实例的状态

multithreading - forkOn 和 -qm RTS 标志之间有什么关系?

OpenCL:SIMT执行模型的基本问题

c - 我想在我的程序中创建一个死锁,但它不起作用(C、fork、并行编程)

json - 在haskell中用aeson解析部分json对象

haskell - 了解 Haskell 类的种类

haskell - 将空构造函数与代数数据类型一起使用,而不是用 Maybe? 包装

java - 为什么 volatile 变量比普通同步更有效

Java:使用 ExecutorService 实现并发

haskell - xmonad 垂直调整图 block /窗口的大小