2012-11-16 5 views
0

자바에서, 자바 쓰레드에서 하나의 태스크를 수행하기 위해 다중 쓰레드를 추가 할 것인가?자바 스레드 멀티 쓰레드

현재 내 프로그램에서 주 스레드가 사용되었지만 속도가 느립니다. 현재 측정치는 초당 500 프로세스 였지만 총 프로세스 수는 10 억을 넘었습니다. 프로그램을 빨리 실행하려면 어떻게해야합니까?

+0

높은 수준의 추상화를 사용하십시오 (예 : java.lang.Thread과 같은 낮은 수준의 추상화를 사용하여보다 단순한 작업을 수행하십시오.) 케이크를 만들 때 함께 100 명을 추가 할 것입니다. –

+0

주 스레드는 무엇을하고 있습니까? 수행 한 작업에 대한 자세한 내용을 제공해야합니다. 예를 들어 작업에서 큰 파일을 읽은 다음 병렬 처리하면 성능이 저하됩니다. – Raam

+1

작업에 따라 달라집니다. 주로 CPU를 많이 사용하는 경우 스레드를 추가하면 도움이됩니다. 병목 현상이 파일에서 데이터를 읽는 경우에는 도움이되지 않습니다. 아이디어를 얻으려면 다음의 경험 법을 참조하십시오. http://stackoverflow.com/a/2193349/829571 – assylias

답변

3

java에서는 Java 빠른 시작을 위해 Java에서 하나의 작업을 수행하는 다중 스레드가 추가됩니까?

전적으로 당신이하는 일에 달려 있습니다. 독립적 인 데이터로 작업을 수행하고 결과를 검색하거나 저장하는 데 병목 현상이없는 경우, 둘 이상의 프로세서가있는 머신을 사용한다고 가정하면 스레드를 더 많이 사용하면 도움이 될 것입니다.

그러나, 여러 가지 방법이 있습니다 그것을 할 수 하지 도움 : 속도가 느린 리소스에서 입력 데이터를 읽는 경우 어쨌든 을 읽을 수

  • , 당신은 빨리 그것을 처리 할 수있다
  • 느린 리소스에 결과를 작성하는 경우 결과를 작성할 수있는 최대한 빨리 처리 할 수 ​​있습니다.
  • 하나의 작업이 다른 작업의 결과에 따라 다르면 어떤 병렬 처리도 수행하지 못할 수도 있습니다.
  • LY는 하나 개의 CPU 코어를 가지고, 그리고 작업은 단지을의 경우로, 다음 추가 더 많은 스레드가 유의하게
도움 스레딩이 경우 일부에서

,하지만 도움이되지 않습니다 이미 CPU 바인딩입니다 CPU가 묶여 있고 여분의 코어가 충분합니다. 현재 병목 현상이있는 곳을 찾아야합니다.

의 경우 최대 속도에 비례하여 얻을 수있는 코어 수에주의해야합니다. 따라서 16 코어 (가능성은 낮지 만 실현 가능) 및 완벽한 병렬 처리가 가능한 경우 하나의 코어에서 초당 500 개의 항목을 처리 할 수 ​​있고 10 억 개의 항목이 있으면 모든 것을 처리하는 데 거의 35 시간이 걸릴 것입니다.

거의 중 하나 인 특정 중 하나는 멀티 스레드 코드가 단일 스레드 코드보다 복잡하다는 것입니다.

+0

이 유용한 정보 주셔서 감사합니다 –

관련 문제