2013-05-17 6 views
1

많은 IO 작업이 필요하지 않습니다. 하나는 웹 페이지를 가져오고 파싱하고 다른 하나는 데이터베이스에서 파싱 한 데이터를 저장하는 것입니다. 웹의 크롤링이 계속되는 동안이 작업이 반복됩니다.동적으로 스레드 수를 최적화하십시오.

각 작업에서 동적으로 작동하는 스레드 수를 더하거나 빼서 전체 시스템이 실행되는 컴퓨터에서 성능이 최적이되는 방법이 있습니까? 이 방법은 미리 액세스 할 수없는 여러 컴퓨터에 배포되기 때문에 벤치마킹이 필요하지 않습니다.

일부 출처 또는 정보를 안내해주십시오.

+0

일부 가이드 http://parsec.cs.princeton.edu/publications/iiswc62-pusukuri.pdf –

+1

* ['FixedThreadPool'] (http://docs.oracle.com/javase/7/docs/api) /java/util/concurrent/Executors.html#newFixedThreadPool%28int%29) *, 다른 부분은 * [this] (http://stackoverflow.com/questions/1980832/java-how-to-scale-threads)를 참조하십시오. - according-to-cpu-cores) * 게시. –

답변

1

동적으로 조정하는 스레드 수는 아무런 문제가되지 않습니다 (예 : ThreadPoolExecutor 사용).

그러나 최적의 스레드 수는 두 가지 요인에 의해 제한되는 것을 나에게 같습니다

  1. 당신의 "다운로드 스레드"에 대한 네트워크 대역폭
  2. 당신의 "데이터베이스에 대한 허용 데이터베이스 연결의 최대 수 threads "

페이지가 실제로 작지 않은 한 각 스레드가 다른 스레드의 대역폭을 훔치기 때문에 다운로드 부분을 다중 스레드해야하는지 잘 모르겠습니다.

관련 문제