Multithreading Haskell多线程有多困难?
我听说在Haskell中,创建多线程应用程序与使用标准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不需要它来
-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库的数据并行性