4

在 Haskell 中,forkIO 创建了一个未绑定(Haskell)线程,而 forkOS 创建了一个绑定(本机)线程。我在这里提到的上一个问题的答案是不能保证 Haskell 线程保持在同一个操作系统线程上,这似乎得到了Control.Concurrent模块的文档的支持。我的问题是,如果一个正在运行的 Haskell 线程被交换到另一个操作系统线程,它的 ThreadID 会保持不变吗?

4

1 回答 1

8

是的。

AThreadId是表示线程句柄的抽象类型。

这就是您向特定线程发送异步信号的方式:使用ThreadId. 涉及哪个操作系统线程并不重要,而且目标线程很可能根本没有绑定到任何操作系统线程(例如,它正在休眠)。

“操作系统线程”的存在在某种程度上是一个实现细节,尽管如果您将 FFI 与某些库一起使用,则需要管理它们。否则,您几乎可以忽略代码中的操作系统线程。

于 2012-07-17T03:54:52.030 回答