2017-12-04 17 views
1

저는 Akka 라이브러리를 사용하고 있습니다.범위를 벗어난 액터에 액세스하는 액터

여러 액터가 객체에서 함수를 호출하면 어떻게됩니까? 다른 액터가 객체에 액세스하는 것을 차단합니까?

내가 이것을 묻는 이유는 akka 배우와 함께 JBCrypt를 사용하기 때문입니다. 그리고 우리는 여러 문자열을 동시에 암호화 할 수 있기 때문에 JBcrypt.hash (...)를 호출하는 각 액터가 있습니다. 스칼라에서 객체가 한 곳에 있기 때문에 동일한 객체 (라이브러리)를 사용하는 여러 액터가 실제로 발생하는 동시성을 차단할 수 있다고 생각하기 때문에 어떻게 작동하는지 확신 할 수 없습니다.

답변

0

기능 구현 방법에 따라 다릅니다. 함수가 내부 변경 가능 상태에 액세스하여 스레드 안전성을 달성하기 위해 동기화하려고하면 문제가 발생합니다. 이 함수가 순수한 함수이고 외부 상태에 액세스하지 않으면 안전합니다. 함수가 변경 가능 상태를 가지면 최소한 변경 가능한 상태를 포함해야합니다.

2

, ThreadLocal 또는 개체 잠금과 같은 동시성 제어 메커니즘을 사용하지 않으면 라이브러리를 호출하는 object에서 함수를 호출하는 여러 액터가 차단되지 않습니다. 차단 아래 Printer 객체에 print를 호출 예를 들어

:

class BlockingPrinter(){ 
    def print(s: String) = synchronized{s} 
} 

object Printer{ 
    val printer = new BlockingPrinter() 

    def print(str: String) = printer.print(str) 
} 

을하지만 아래 Printer 객체를 호출하지 않습니다 요약

class NonBlockingPrinter(){ 
    def print(s: String) = s 
} 

object Printer{ 
    val printer = new NonBlockingPrinter() 

    def print(str: String) = printer.print(str) 
} 

, 당신이있어 도서관 호출은 동시성 처리 방법을 결정하는 호출입니다. 사실 당신이 물건을 부르는 것이 아닙니다.