多线程功能程序可以确定吗?

时间:2014-12-24 03:42:28

标签: multithreading functional-programming deterministic non-deterministic

我已经读过,函数式编程非常适合多线程程序,因为它带来了编程语言范例(不变性,无副作用函数)。 我还读到多线程程序通常是非不确定的。

鉴于stakx对类似(但不同)问题的回答,这是我的问题:

如果使用函数式编程语言进行编码,多线程程序是否可以确定?

1 个答案:

答案 0 :(得分:0)

当然。任何程序都可以确定。例如,

Thread.new do
  1 + 2
end
Thread.new do
  2 + 3
end

是确定性的,因为它不会以任何方式影响宇宙。这就是你订购副作用的方式。如果你没有可变结构,那么只能预测输入输出和进程间通信的顺序。但是如果你问的是每个函数程序是否都是确定性的,答案是否定的:当你的线程进行通信或做IO时,你需要一些明确的调度来使它每次都能正常工作。