스칼라 2.9. * 이후로 setMaximumPoolSize
메서드가 ForkJoinPool
에서 사라졌으며 원하는대로 처리되는 것으로 나타났습니다. 스칼라의 병렬 콜렉션에서 병렬 처리를 제한하는 것에 대한 대부분의 논의는 동일한 클래스 (사라졌지 만 나에게는 큰 문제는 아니지만)의 setParallelism
메소드를 중심으로하지만, 필자의 경우 병렬 작업은 외부 IO를 수행 할 수 있으며 종종 그걸 차단 해. 이 경우 ForkJoinPool
은 더 많은 스레드를 발생시키고 문제의 공유 IO 자원에 대해 DOS를 효과적으로 수행합니다. 이는 바람직하지 않습니다.ForkJoinPool에서 setMaximumPoolSize를 대체합니다.
어떤 방식 으로든 풀의 스레드 수를 제한하는 방법이 있습니까? IO 생성시 블록 생성에 대해서는 신경 쓰지 않지만 IO 작업은 독립적이며 서로 간섭하지 않기 때문에 어느 정도의 병렬 처리를 원합니다.
Java8 이전에 할 일이 있습니까? 내가 이해할 수 있듯이, Scala'ForkJoinPool'은 의존하고 싶은 것보다 새로운 JRE에 의존하지 않기 위해 자바 코드를 복제 한 것이지만 현재 스칼라 버전에는 언급 한 연속 스레드가 없다고 생각합니다. 필자의 목표는 수천 개의 동시 입출력 스레드를 피하는 것이고, 어떻게 내가 거기에 도착하는지 정말로 신경 쓰지 않는다. –
내가 아는 것은 아닙니다. 현재 스칼라 버전은 이전 버전의 jsr166 코드를 기반으로합니다. 이 버전에서는 "연속 스레드"를 사용하므로 추가 스레드가 모두 필요합니다. 문제는 항상 "해당 스레드가 wait()를 발행해야 할 때 스레드를 비우는 방법"으로옵니다. 유일한 정답은 프레임 워크에서 수행 할 수없는 컨텍스트 전환입니다. – edharned
부! :(아 글쎄, 상황을 명확히 해줘서 고마워! –