在Haskell中,forkIO创建一个未绑定(Haskell)线程,forkOS创建一个绑定(本机)线程。上一个问题here的答案,我曾提到Haskell线程不能保证保留在同一个OS线程上,这似乎得到了Control.Concurrent模块文档的支持。我的问题是,如果正在运行的Haskell线程被交换到另一个OS线程,它的ThreadID是否会保持不变?
答案 0 :(得分:8)
是
ThreadId
是表示线程句柄的抽象类型。
这是您向特定线程发送异步信号的方式:使用ThreadId
。涉及哪个OS线程并不重要,并且目标线程通常很可能根本不绑定到任何OS线程(例如,它正在休眠)。
“操作系统线程”的存在在某种程度上是一个实现细节,但如果将FFI与某些库一起使用,则需要对它们进行管理。否则,您通常可以忽略代码中的OS线程。