Program Tip

scala.concurrent.blocking 사용 사례

programtip 2020. 11. 2. 08:24
반응형

scala.concurrent.blocking 사용 사례


나는 scala.concurrent.blocking방법을 발견했고 Scala 문서에 따르면 이것은 ...

잠재적으로 차단되는 코드를 지정하여 현재 BlockContext가 런타임의 동작을 조정할 수 있도록하는 데 사용됩니다. 차단 코드를 올바르게 표시하면 성능이 향상되거나 교착 상태가 방지 될 수 있습니다.

몇 가지 의심이 있습니다.

  • 새 스레드가 생성되는 요인은 무엇입니까?
  • scala.concurrent.ExecutionContext.Implicits.global실행 컨텍스트 또는 사용자가 만든 실행 컨텍스트 에만 적용 됩니까?
  • 실행 파일을 blocking {...로 래핑하면 어떻게됩니까 }?
  • 이 구조를 사용해야하는 실제 사용 사례입니다.

  1. 새 스레드는 fork / join 풀의 모든 스레드가 join구성을 사용하여 서로를 기다리고 있음을 감지하고 잠재적으로 스레드 중 하나를 완료 할 수있는 완료해야 할 작업이 더 있음을 감지하면 fork / join 풀에 생성됩니다. 또는 ForkJoinWorker스레드 중 하나 가를 사용 join하지 않고 차단하는 코드를 실행하는 경우 ManagedBlockers를 사용하여 풀에 알릴 수 있습니다 .
  2. 잠재적으로 모든 종류의 실행 컨텍스트에 적용 가능합니다 ExecutionContext. 작업자 스레드에 의해 실행 된 코드가 잠재적으로 일부 조건에서 차단되고이 조건이 다른 스레드를 사용하여 다른 것을 계산하여 해결 될 수 있음을 구현에 알리는 역할을합니다. . 실행 컨텍스트는 이에 대해 작동하거나 작동하지 않을 수 있습니다. 현재 (2.10, 2.11) 구현에서는 blocking기본 전역 실행 컨텍스트에서만 작동합니다.
  3. 실행 파일을 차단으로 래핑하면 약간의 런타임 오버 헤드가 발생하므로 항상 그렇게하지 마십시오.
  4. 오랜 시간 (예 : 초 또는 분) 계산이 있거나를 사용하여 완료하기 위해 미래를 Await기다리고 있거나 모니터의 상태가 해결되기를 기다리는 경우,이 조건은 다른 작업으로 해결할 수 있습니다. 동일한 실행 컨텍스트에서 실행되어야하는 future-이 모든 경우에 blocking.

편집하다:

Learning Concurrent Programming in Scala 책의 4 장을 살펴보십시오 .

참고 URL : https://stackoverflow.com/questions/19681389/use-case-of-scala-concurrent-blocking

반응형