【发布时间】:2013-09-01 19:31:32
【问题描述】:
我正在阅读 Haskell 中的半显式并行性,但有些困惑。
标准杆 :: a -> b -> b人们说这种方法允许我们通过并行评估 Haskell 程序的每个子表达式来自动进行并行化。但这种方法有以下缺点:
1) 它创建了太多的小项目,无法有效地安排。据我了解,如果你对 Haskell 程序的每一行都使用 par 函数,它会创建太多线程,而且根本不实用。对吗?
2) 使用这种方法,并行性受到源程序中数据依赖性的限制。如果我理解正确,这意味着每个子表达式都必须是独立的。就像,在 par 函数中,a 和 b 必须是独立的。
3) Haskell 运行时系统不一定创建线程来计算表达式 a 的值。相反,它会创建一个火花,它有可能在与父线程不同的线程上执行。
所以,我的问题是:运行时系统最终会创建一个线程来计算 a 还是不?或者如果需要表达式a来计算表达式b,系统会创建一个新线程来计算a?否则,它不会。这是真的吗?
我是 Haskell 的新手,所以也许我的问题对你们所有人来说仍然是基本的。谢谢你的回答。
【问题讨论】:
标签: multithreading parallel-processing haskell graph-reduction