在OS线程周围改组Haskell线程时,ThreadID是否一致?

Dwi*_*son 4 concurrency haskell

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

Die*_*Epp 8

是.

A ThreadId是表示线程句柄的抽象类型.

这是您向特定线程发送异步信号的方法:使用ThreadId.涉及哪个OS线程无关紧要,并且目标线程通常很可能根本不绑定到任何OS线程(例如,它正在休眠).

"操作系统线程"的存在在某种程度上是一个实现细节,但如果您将FFI与某些库一起使用,则需要对它们进行管理.否则,您通常可以忽略代码中的OS线程.