multithreading - 并行和并发编程(Haskell)方面的开销是多少?

标签 multithreading haskell concurrency parallel-processing

并行和并发编程 (Haskell) 方面的开销是多少?

However, even in a purely functional language, automatic parallelization is thwarted by an age-old problem: To make the program faster, we have to gain more from parallelism than we lose due to the overhead of adding it, and compile-time analysis cannot make good judgments in this area. An alternative approach is to use runtime profiling to find good candidates for parallelization and to feed this information back into the compiler. Even this, however, has not been terribly successful in practice.

(引自 Simon Marlow 的书 Haskell 中的并行和并发编程)

Haskell 中有哪些示例?

最佳答案

在任何系统中,线程都会占用资源。您必须将该线程的状态存储在某处。创建线程并使其运行需要时间。现在GHC使用轻量级的“绿色线程”,它比操作系统线程便宜得多。但它们仍然需要一些费用。

如果您(例如)要为每个加、减、乘和除生成一个新线程...那么,生成一个新线程的工作必须至少是几十个机器指令,而一个微不足道的机器指令算术运算可能是一条指令。将工作作为 Spark 进行排队比生成一个全新的线程需要更少的工作,但即使这样也不像在当前线程上执行操作那么便宜。

基本上,您想要并行执行的工作的成本必须超过安排并行执行它的成本。 (无论是启动操作系统线程或绿色线程,还是排队 Spark 或其他什么。)GHC 有各种各样的东西来降低成本,但它仍然不是免费

关于multithreading - 并行和并发编程(Haskell)方面的开销是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45050415/

相关文章:

java - 多线程: Multiple threads interacting with same table

multithreading - Perl:特殊变量线程安全吗?

java - 使用 Java 的 htmlunit.WebClient 和多个代理进行多线程处理

haskell - Haskell 中有隐式内存吗?

Java 8 并发 HashMap

c - 在多个 fork 进程之间共享错误

java - 锁定中心化交易

haskell - 为 Haskell 堆栈编写 pop 和 push 函数

haskell - XMonad 卷配置不起作用

Java8;在一个线程上利用 sleep 时间,但可调用多个线程