Multithreading Haskell多线程有多困难?

Multithreading Haskell多线程有多困难?,multithreading,haskell,concurrency,multicore,Multithreading,Haskell,Concurrency,Multicore,我听说在Haskell中,创建多线程应用程序与使用标准Haskell应用程序并使用-threaded标志编译它一样简单。然而,其他情况描述了在实际源代码中使用par命令 Haskell多线程的状态是什么?引入到程序中有多容易?有好的多线程教程介绍这些不同的命令及其用法吗?还有并发术语 在代码中没有任何更改的情况下,haskell rts将尝试将它们用于某些内部进程,但要在应用程序中使用,您应该给出一个由par b(f a b)完成的提示,这迫使haskell在计算b时不那么懒惰,即使f不需要它来

我听说在Haskell中,创建多线程应用程序与使用标准Haskell应用程序并使用
-threaded
标志编译它一样简单。然而,其他情况描述了在实际源代码中使用
par
命令


Haskell多线程的状态是什么?引入到程序中有多容易?有好的多线程教程介绍这些不同的命令及其用法吗?

还有并发术语

在代码中没有任何更改的情况下,haskell rts将尝试将它们用于某些内部进程,但要在应用程序中使用,您应该给出一个由
par b(f a b)
完成的提示,这迫使haskell在计算
b
时不那么懒惰,即使
f
不需要它来计算结果

对于每个需要其所有参数的函数(如
a+b
),不这样做的原因之一是同步(调度计算和等待结果)会带来一些开销,您可能不想因为可以并行计算乘法而为
(2*3)+(3*4)
花费额外的时间。您可能会丢失一些缓存命中或类似的内容,或者在单处理器上进行优化(即,您需要将结果从一个处理器传递到另一个处理器)

当然,使用
par
的代码是难看的,当您折叠列表或其他具有轻子元素的数据结构时,您可能需要计算轻子元素的一些块,以确保开销/计算量非常小。以解决您可以查看的问题

还有数据并行Haskell(DPH)

如果您的程序更多地是关于IO monad的,那么您肯定需要进行很多更改。看到了吗,还有许多来自

Haskell多线程的状态是什么

成熟。该实现大约有15年的历史,事务性内存可以使用5年。GHC是一种广泛使用的编译器,具有大量的开源支持和商业支持

引入到程序中有多容易

这取决于算法。有时它可以是一行使用
par
来获得并行性。有时必须开发新的算法。一般来说,在Haskell中引入安全并行性和并发性比在典型语言中更容易,而且性能良好

有没有好的多线程教程介绍这些不同的命令及其用法

Haskell中有三种主要的并行和并发编程模型

  • 通过
    par
  • 通过forkIO/MVars和软件事务内存实现显式并发和并行
  • 通过DPH库的数据并行性
这些是主要的事情。在所有情况下,您都使用多线程编译来使用多核运行时,但将特定问题并行化的容易程度取决于您使用的算法以及从该列表中采用的并行编程模型

以下是如何实现加速

我认为这是一个很好的教程。

我相信Simon Marlow在Haskell中的并行和并发编程通常被认为是对本主题的最好介绍。