2010-12-28 4 views
1

스칼라 액터 및 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

+1

왜 자바 스레드 대신 액터를 사용하고 있습니까? 배우 - 특정 기능을 활용하지 않고 항상 실행할 수 있기를 원합니다. 스레드와 정확히 같습니다. run 메소드를 오버라이드하고 거기에 try 블록을 넣으십시오. –

+1

어디에서 모든 것을 얻고 있습니까? "입력"은 어디에 선언 되었습니까? 누가 "processInput"을 소유합니까? 액터는 _messages_에 대한 행동에 대한 반응입니다. 나는 당신의 예제에서 전혀 메시지를 볼 수 없습니다. –

+0

분명히 여기에 명백한 것을 보지 못했던 배우를 사용하는 데 너무 죽어있었습니다. 나를 다시 돌아 오는 주셔서 감사합니다. – raichoo

답변

0

질문에 Viktor가 답변했습니다.

1

을 그래서 차단 될 때까지 반복해서 일어날 :

는 는

이 문제를 일으키는 코드는 다음과 다소 보인다 .