2017-10-31 7 views
0

Java 웹 프로젝트에서 사용자는 자신의 작업을 웹에 보냅니다. 이러한 작업을 처리하기 위해 작업을 처리하기 위해 10 개의 스레드가 포함 된 스레드 풀을 사용합니다. 모든 작업은 스레드에 구축되어 스레드 풀로 전송됩니다. 스레드 풀은 정적 변수로 설계되었으므로 모든 스레드 (스레드)가 동일한 스레드 풀을 공유합니다.
오늘 스레드 풀의 스레드 수를 결정하는 방법

  • 정적 스레드 풀의 스레드입니다 너무 적은 것입니다 ..., 200 명의 사용자가 내 웹에 와서 다음, 그들은 그들의 작업은 매우 매우 느리게 실행 불평? 아마도 그 숫자는 30이어야할까요? 50?
  • 어쩌면 정적 스레드 풀을 사용하지 않아야합니까?
  • 아마도 많은 작업이 있기 때문에 스레드 풀을 사용해서는 안되며, 단지 taskThread.start() 일 수 있습니까?

답변

0

일반적으로 IO가 처리량을 제한하는 방법과 사용 가능한 코어의 양을 파악할 수 있습니다. 완벽한 공식은 다음과 같습니다

number_of_cores*(1/cpu_sticky) 

높은 CPU를 많이 높은 가지고있는 반면 cpu_sticky는 (0.1 말) 0과 그래서 당신은 높은 IO로 그것을 인식하는 경우 1. cpu_sticky가 매우 낮은 인 경우 cpu_sticky (말 .9).

대부분의 경우 비록 그 코드는 DB에서 하나 이상의 행, 그래서 하나 개 이상의 스레드가 완료 기다릴 필요를 잠금 긴 DB를 검색하거나, 검색, 필요합니다. 이 경우 많은 스레드가 있지만 각 스레드는 여전히 느립니다.

+0

Java에서 number_of_cores를 찾는 데 대한 보조 노트는 이와 같이 사용할 수 있습니다. int number_of_cores = Runtime.getRuntime(). availableProcessors(); – mrgenco

관련 문제