스칼라에서 비 블로킹 방법을 만드는 좋은 방법은 무엇입니까? 내가 생각할 수있는 한 가지 방법은 스레드/액터를 만드는 것이고 메서드는 스레드에 메시지를 보내고 반환합니다. 비 차단 방법을 만드는 더 좋은 방법이 있습니까?스칼라에서 비 블로킹 방법을 만드는 방법은 무엇입니까?
5
A
답변
13
사용 scala.actors.Future :
import actors._
def asyncify[A, B](f: A => B): A => Future[B] = (a => Futures.future(f(a)))
// normally blocks when called
def sleepFor(seconds: Int) = {
Thread.sleep(seconds * 1000)
seconds
}
val asyncSleepFor = asyncify(sleepFor)
val future = asyncSleepFor(5) // now it does NOT block
println("waiting...") // prints "waiting..." rightaway
println("future returns %d".format(future())) // prints "future returns 5" after 5 seconds
하나 개 이상의 매개 변수가 연습 문제로 남겨과 기능을한다 "asyncify"오버로드되었습니다.
그러나 하나의 경고는 예외 처리입니다. "asyncified"되고있는 함수는 모든 예외를 잡아서 처리해야합니다. 함수에서 throw 된 예외에 대한 동작은 정의되지 않습니다.
2
actors에 대해 자세히 알아보십시오.
2
"차단 중"의 정의에 따라 다릅니다. 엄밀히 말하자면 잠금 장치를 획득해야하는 모든 항목이 차단됩니다. 액터의 내부 상태에 의존하는 모든 연산은 액터의 잠금을 얻습니다. 여기에는 메시지 전송이 포함됩니다. 많은 스레드가 한 번에 한 액터에 메시지를 보내려고하면 그들은 줄을서야합니다.
그래서 비 차단이 필요한 경우 java.util.concurrent에 다양한 옵션이 있습니다.
실용적인 관점에서 볼 때 액터는 동기화 된 작업으로 상당한 양의 작업을 수행하지 않으므로 넌 블로킹에 충분히 근접한 무언가를 제공하므로 액터가 사용자의 필요를 충족시킬 가능성이 있습니다.
1
나는 미래에 관한 나의 블로그에 대해 아주 철저한 설명을하고있다. 실제로 선물을 직접 구현할 수있는 방법을 보여주기 때문에 주제에 대해 매우 잘 이해할 수 있습니다. 나는 당신이 그것을 읽을 제안 :
커피를 가져와!
관련 문제
- 1. Android에서 두 개의 비 블로킹 서비스를 만드는 방법은 무엇입니까?
- 2. 비 블로킹 소켓
- 3. 비 블로킹 소켓
- 4. 비 블로킹 동시 수집?
- 5. 이 방법을 비 재귀 적으로 만드는 방법은 무엇입니까?
- 6. 비 블로킹 UI WPF/Silverlight
- 7. 비 블로킹 소켓에 sendfile() 완료
- 8. 비 블로킹 배치 파일을 실행
- 9. Java 소켓 비 블로킹 읽기
- 10. 콘솔 C++ 프로그램에서 간단한 비 블로킹 팝업 창을 만드는 방법?
- 11. C# 컴팩트 프레임 워크 비 블로킹 소켓을 만드는 방법
- 12. 자바의 비 블로킹 소켓에 객체를 직렬화하려면 어떻게해야합니까?
- 13. 장치에 넌 블로킹 쓰기를 수행하는 방법은 무엇입니까?
- 14. 비 블로킹 SwapBuffers() with VSync = on
- 15. 비 블로킹 파일 디스크립터 유닉스 네트워크 프로그래밍
- 16. while (true) 루프가없는 C# 비 블로킹 소켓
- 17. Math 클래스에서 뺄셈 방법을 만드는 방법은 무엇입니까?
- 18. 장치 드라이버 DLL 블로킹과 비 블로킹?
- 19. 스칼라에서 이기종 배열을 만드는 방법은 무엇입니까? 자바 스크립트에서
- 20. javanio로 블로킹에서 비 블로킹 I/O로 전환
- 21. Java 비 블로킹 소켓 플러시 작업
- 22. 비 블로킹 유닉스 소켓 속도 향상 (C++)
- 23. QTextStream을 사용하여 stdin을 비 블로킹 방식으로 읽음
- 24. 저장하기 전에 비 블로킹 데이터 확인
- 25. Tomcat 6 CometProcessor에서 쓸 수있는 비 블로킹
- 26. 스칼라에서 여러 값을 일치시키는 방법은 무엇입니까?
- 27. 블로킹/동기 방식으로 파일을 다운로드하는 방법은 무엇입니까?
- 28. 스칼라에서 유형 객체 컬렉션을 만드는 방법
- 29. UIGestureRecognizer 블로킹 테이블 뷰 블로킹
- 30. 스칼라에서 SNMP 트랩을 수신하는 간단한 방법은 무엇입니까?