스칼라 액터 및 IO 차단에 약간의 문제가 있습니다. 나는 입력 스트림을 소비하는 익명의 액터가있는 액터를 사용하고 있습니다. 문제는이 스트림이 한 줄만 읽은 다음 다시 깨우지 않고 차단한다는 것입니다. 저를 혼란스럽게하는 것은 소비가 행위 방법에서 일어 났을 때 효과가 있다는 것입니다 (우연의 일치인가?). 응용 프로그램 자체에는 약간의 작업을 수행하는 더 많은 액터와 자바 스레드가 있습니다.[Scala] : 액터 및 블로킹 IO 관련 문제
내 질문은 : 그런 문제를 피하는 일반적인 방법은 무엇입니까? 어떤 포인터? 내의 readLine에 대한 호출은 루프 {} 안에
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
왜 자바 스레드 대신 액터를 사용하고 있습니까? 배우 - 특정 기능을 활용하지 않고 항상 실행할 수 있기를 원합니다. 스레드와 정확히 같습니다. run 메소드를 오버라이드하고 거기에 try 블록을 넣으십시오. –
어디에서 모든 것을 얻고 있습니까? "입력"은 어디에 선언 되었습니까? 누가 "processInput"을 소유합니까? 액터는 _messages_에 대한 행동에 대한 반응입니다. 나는 당신의 예제에서 전혀 메시지를 볼 수 없습니다. –
분명히 여기에 명백한 것을 보지 못했던 배우를 사용하는 데 너무 죽어있었습니다. 나를 다시 돌아 오는 주셔서 감사합니다. – raichoo