我有一个用 Haskell 编写的计划算法,其任务是在给定的时间内评估一组可能的计划,其中评估过程可以运行任意时间以产生越来越准确的结果。执行此操作的自然且据称最有效的方法是为每个评估任务提供自己的轻量级 Haskell 线程,并让主线程在休眠指定的时间后收集结果。
但实际上,在整个可用时间内,总是有一两个线程处于 CPU 饥饿状态。我自己对信号量/等控制执行的实验表明,这很难解决,因为我似乎无法强制给定线程停止执行(包括使用 Control.Concurrent 中的“yield”。)
是否有一种众所周知的方法来确保任意数量的 Haskell 线程(不是 OS 线程)在(相当短的)挂钟时间跨度内每个接收大致均匀的 CPU 时间?如果做不到这一点,这是确保执行相同迭代的多个线程在给定数量的内核上相当“轮流”以使所有内核都被使用的好方法吗?