【发布时间】:2010-01-11 06:23:39
【问题描述】:
标题可能有点模糊。这就是我的意思:
假设我有两种方法可以获取程序的输入。第一种是通过键盘,使用函数getLine 阻塞直到读取一行。另一种是,比如说,通过TChan,其中使用readTChan chan 也会导致阻塞,直到通道中存在一个值,然后才会读取它。
我想要完成的是能够等待 both 值,使用单个线程并且不允许我的 CPU 跳转到 100%。当两个值之一可用时,它被获取并且程序恢复。 (比如说,使用Either 通知接收到了两个值中的哪一个。)
这可能吗?
非常感谢!
【问题讨论】:
-
让一个 IO 线程调用 getLine 并将其结果也放入 TChan 怎么样?在我看来它应该可以工作..
-
为什么要使用单线程?例如,如果您需要等待 3 个输入怎么办?还是5?还是10?为什么要随意限制?
-
我猜你有一些代码在使用多个线程并且你有 100% 的 CPU?您可能想发布代码以便其他人了解原因:正确的解决方案是线程,它可能只是一个实现问题。
标签: haskell concurrency io