2010-12-17 1 views
1

작업은 CPU 사용량이 많은 조작으로 다중 I/O 스트림 (HTTP 다운로드)을 처리해야합니다. 이상적으로는 전체 대역폭과 CPU 100 %를 사용하고 싶습니다. 물론 CPU 처리량이 많으면 인터넷 다운로드 속도가 느려집니다. 처리되지 않은 데이터는 디스크에 캐시 될 수 있습니다. 이 기능을 제공하는 ASF 또는 다른 구성 요소에 기존 Executors가 있습니까? 그렇지 않다면 이것을 달성하는 가장 좋은 방법은 무엇입니까? 하나는 Internet-To-Disk이고 다른 하나는 Disk-To-CPU-To-Disk 작업입니다.I/O Y 인딩 및 CPU-heavy 조작에 대한 Java 스레딩 동기화

편집 :

2 스레드 풀 : Internet-To-DiskDisk-To-CPU-To-Disk는 생산자/소비자 접근 방식 자체가

내 질문을 명확히 수 있습니다. 문제는 producersconsumers에 맞는 스레드 수를 선택했는지 확인하는 것입니다. 같은 코드가 여러 상자의 코어와 다른 대역폭의 아치에서 동시에 작동합니다. 100 % 대역폭과 100 % CPU가 소모되도록 올바른 수의 스레드를 선택했는지 확인하는 방법은 무엇입니까?

답변

1

CPU 처리가 시스템의 주요 병목 현상이라고 가정하면 CPU 처리 스레드 수는 최소한 사용 가능한 CPU 수 또는 코어 수로 설정해야합니다.

입출력 부분은 아마도 많은 CPU를 사용하지 않을 것이지만 과도한 스레드 컨텍스트 전환을 방지하기 위해 몇 개의 스레드 (코어 수와 같거나 작은 고정 풀)를 할당하려고 할 수 있습니다. 동시 I/O 스트림의 경우

CPU 처리 스레드가 항상 처음부터 끝까지 100 % CPU를 사용하지 않는 경우 CPU 처리를위한 스레드 수를 코어 수보다 약간 큰 수로 설정할 수도 있습니다. 예를 들어, 처리 중에 I/O를 수행하거나 공유 리소스에 액세스 할 수 있습니다.

그러나 모든 시스템과 마찬가지로 이상적인 스레드 수는 프로그램 특성에 따라 크게 달라질 수 있습니다. JVisual VM (JDK와 함께 제공됨)과 같은 도구를 사용하여 프로그램에서 스레드가 사용되는 방식을 분석하고 다양한 스레드 설정 변형을 시도 할 수 있습니다.

0

이 목적으로 producer-consumer을 사용할 수 있습니다. 요구를 충족시키기 위해 필요한만큼 많은 생산자와 소비자를 사용하십시오.

+0

오케이, 아이디어는 대역폭과 CPU를 가능한 한 많이로드하는 것이 었습니다. (이것은 수주 만에 HTML 페이지를 다운로드해야하는 문제가 아니라 다운로드가 중단되고 CPU 처리 만 유지됩니다 기본적으로 - 질문은 - 양쪽 수영장 (또는 생산자/소비자)이 100 % 시스템을 완전히로드하는 방법 - 저울에 적합한 스레드 수를 자동으로 찾는 방법? – Archer

0

CPU 스테이지가 다운로드 시간보다 집중적 인 경우 데이터를 처리 할 수있는만큼 다운로드하지 않는 것이 좋습니다. 그렇게하면 여러 개의 인터넷 -CPU-TO-Disk 프로세스를 가질 수 있습니다. 무대를 건너 뛰면 더 빠를 수 있으며 더 간단해질 것입니다.

0

나는 데이터를 처리하는 하나의 스레드 풀 (ExecutorService에 의해 관리 됨)과 인터넷에서 데이터를 다운로드하기위한 하나 이상의 스레드를 생산자 - 소비자 아키텍처로 사용할 것입니다.

처리 할 데이터는 제한된 차단 대기열 (예 : LinkedBlockingQueue)에 저장되므로 다운로드 스레드는 필요한 경우에만 (즉, 컴퓨팅 스레드가 새 데이터를 처리 할 수있을 때) 데이터를 페치합니다. 또한이 구조는 스레드 안전성과 메모리 게시를 보장합니다.

+0

스레드에서 다운로드 및 처리를 수행하는 경우 다운로드 또는 처리 스레드가 너무 많아서 서로 기다릴 수 없습니다. –

+0

블로킹 큐에 새 항목을 넣을 수있는 권한을 대기하는 스레드는 대기 모드에 있습니다. 그들은 저렴하고 CPU 시간을 소비하지 않습니다. 그리고 아키텍처의 명확성을 위해 다운로더 용, 데이터 처리 용으로 각각 하나씩 두 개의 개별 풀이 있어야합니다. 각 풀은 독립적으로 구성 및 조정할 수 있습니다. 스스로 먹이는 "생산자 - 소비자"패턴은 ... 이상합니다. –