[Scala]:演员和阻塞IO的问题
我对Scala演员和阻止IO有点问题。我使用的是一个参与者,它本身有一个使用输入流的匿名参与者。问题是这个流只读取一行,然后阻塞而不再唤醒。让我困惑的是,当消费发生在act方法中时,它起作用了(巧合?)。应用程序本身有更多的参与者和java线程来做一些工作 我的问题是:避免此类问题的常见做法是什么?有什么建议吗 导致此问题的代码如下所示:[Scala]:演员和阻塞IO的问题,scala,io,blocking,actor,Scala,Io,Blocking,Actor,我对Scala演员和阻止IO有点问题。我使用的是一个参与者,它本身有一个使用输入流的匿名参与者。问题是这个流只读取一行,然后阻塞而不再唤醒。让我困惑的是,当消费发生在act方法中时,它起作用了(巧合?)。应用程序本身有更多的参与者和java线程来做一些工作 我的问题是:避免此类问题的常见做法是什么?有什么建议吗 导致此问题的代码如下所示: object TestActor extends Actor { private val instream = actor { loop {
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对readLine的调用在循环{}内,因此它会反复发生,直到阻塞为止。为什么要使用actor而不是Java线程?您没有利用任何特定于参与者的功能,并且希望它始终运行。这正是线程所做的。只需重写run方法并将try块放在那里。您从哪里获取所有信息?“输入”在哪里声明?谁拥有“processInput”?演员是关于对消息的行为反应,我在你的例子中根本看不到任何消息。显然,我是如此死心塌地地地使用演员来实现这一点,以至于我在这里没有看到明显的效果。谢谢你让我重回正轨。