为什么GHC螺纹重量极轻?

时间:2016-07-31 10:29:20

标签: multithreading haskell

parallel programming in haskell上阅读Simon Marlow的教程。

  

一个线程通常花费不到一百个字节加上堆栈的空间,因此运行时支持数百万个,仅受可用内存的限制,与OS线程不同....

我对线程费用有不同的印象。用于单个线程的内核结构超过4MB(线程堆栈)。 32位进程空间可以生成不超过1000个线程,而不是literally millions

我认为他指的是GHC控制的部分,但如果操作系统已经为线程维护了堆栈,为什么GHC需要再次这样做呢?

1 个答案:

答案 0 :(得分:7)

Haskell正在使用“绿色线程”(由Haskell运行时管理)以及/在操作系统线程之上(您仍然需要使用多个CPU核心)。

  

如果操作系统已经为线程维护了堆栈,为什么GHC需要再次执行此操作?

正是你提到的原因:OS线程很重。绿色线程可以非常轻量级。

如果您熟悉Java,这大致相当于使用Thread而不是将任务提交给由线程池支持的ExecutorService