【问题标题】:Is ThreadID consistent when shuffling Haskell threads around OS threads?在操作系统线程周围改组 Haskell 线程时,ThreadID 是否一致?
【发布时间】:2012-07-17 11:54:52
【问题描述】:

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

【问题讨论】:

  • forkOS 不会创建新的操作系统线程,它将轻量级线程绑定为仅在单个操作系统线程上运行。这对于像 OpenGL 这样在幕后使用线程特定数据的东西很重要。

标签: haskell concurrency


【解决方案1】:

是的。

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2011-05-24
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多