在parallel programming in haskell
上阅读Simon Marlow的教程。
一个线程通常花费不到一百个字节加上堆栈的空间,因此运行时支持数百万个,仅受可用内存的限制,与OS线程不同....
我对线程费用有不同的印象。用于单个线程的内核结构超过4MB(线程堆栈)。 32位进程空间可以生成不超过1000个线程,而不是literally millions
我认为他指的是GHC控制的部分,但如果操作系统已经为线程维护了堆栈,为什么GHC需要再次这样做呢?
答案 0 :(得分:7)
Haskell正在使用“绿色线程”(由Haskell运行时管理)以及/在操作系统线程之上(您仍然需要使用多个CPU核心)。
如果操作系统已经为线程维护了堆栈,为什么GHC需要再次执行此操作?
正是你提到的原因:OS线程很重。绿色线程可以非常轻量级。
如果您熟悉Java,这大致相当于使用Thread
而不是将任务提交给由线程池支持的ExecutorService
。