[Scala]:Actors和阻塞IO的问题

时间:2010-12-28 12:40:52

标签: scala io blocking actor

我在使用Scala Actors和阻止IO方面遇到了一些问题。我正在使用一个演员本身有一个消耗输入流的匿名演员。问题是这个流只读取一行然后阻塞而不再唤醒。令我感到困惑的是,当消费发生在行为方法时(巧合?),它起作用了。应用程序本身有更多的actor和java线程在做一些工作。

我的问题是:避免此类问题的常见做法是什么?有什么指针吗?

导致此问题的代码看起来像这样:

object TestActor extends Actor {

  private val instream = actor {
    loop {
      try {
        println(processInput(input.readLine)) //bufferedinputstream. blocks, no wakeup
      } catch {
        case e: Exception =>
          println(e.toString)
      }
    }
  }


  def act(): Unit = {
    react {
      ...
      case _ => {}
    }
  }
}

此致 raichoo

1 个答案:

答案 0 :(得分:1)

对readLine的调用是在循环{}内部,所以它会一遍又一遍地发生,直到它阻塞。