3

수백 개의 작은 독립 실행 형 작업으로 나눌 수있는 하나의 큰 작업을 고려하십시오. 좀 더 구체적으로 말하자면, 각각의 작은 작업은 간단한 네트워크 요청을 보내고 서버로부터받은 대답을 결정하는 것입니다. 이러한 작은 작업은 1 초보다 오래 걸릴 것으로 예상되지 않으며 총 몇 대의 서버가 필요합니다.Java Executor : 작은 작업 또는 큰 작업?

저는 Executor 프레임 워크를 사용하여이를 구현하는 두 가지 방법을 염두에두고 어느 것이 더 좋고 왜 필요한지 알고 싶습니다.

  1. 송수신 작업을 수반하여 각각 5 ~ 10 개의 작업을 생성하십시오.
  2. 각각의 & 송신에 대해 단일 태스크 (호출 가능 또는 실행 가능)를 작성하여 실행 프로그램에 의해 실행되도록 모든 (수백) 스케줄을 작성하십시오. 내 질문에 내가 (적어도 성능 현명한) 더 나은 어떤이를 테스트하고 자신을 위해 볼 게으른 것을 보여준다 경우

는 미안 해요. 이 질문에 대한 답을 구하면서 좀 더 일반적인 측면이 있습니다. 이와 같은 상황에서 모든 스케줄링 및 기타 작업을 수행하기 위해 실행 프로그램을 사용하려는 경우 적은 수의 태스크를 많이 작성하거나 더 적은 수의 태스크로 그룹화하는 것이 더 낫습니다.

+2

각 작업의 길이가 10-100 밀리 초를 초과하지 않도록하는 것이 좋습니다. –

+0

처리량을 줄이거 나 지연 시간을 줄이기 위해 "더 나은"의미가 무엇인지에 달려 있습니다. 단일 코어에서 작동하는지 8 코어에서 작동하는지에 따라 달라질 수 있습니다. – DNA

+0

그 설명을 더 자세히 설명해 주시겠습니까? – Gray

답변

3

많은 작은 작업을 만들거나 더 적은 수의 큰 작업으로 그룹화하는 것이 좋습니다.

이런 질문으로 일반화하기는 어렵지만, 귀하의 경우에는 5 ~ 10 가지를 수행하는 일부 작업을 작성한 후 실행 프로그램 서비스에 제출하는 것이 바람직하지 않다고 생각합니다.

나는 모든 작업을 ExecutorService에 일련의 개별 작은 작업으로 제출할 것입니다. 나는 이것이 객체/코드 관점에서 작업을 훨씬 더 깨끗하게 만들 것이라고 생각한다. 그들은 일련의 요청/응답을 가질 필요가 없으며 하나의 요청을 만들고 하나의 응답을 처리하는 데 집중할 수 있습니다.

한 가지 예외는 동시 요청을 특정 서버로 보내지 않으려는 경우입니다. 그런 다음 특정 서버에 대한 모든 요청/응답을 수행하고 각 서버에 대한 작업을 제출하는 작업을 수행하는 것이 합리적입니다.

2

일반적으로 요구 사항이 변경되는 경우에도 모듈과 유사하며 원하는 방식으로 결합 될 수 있으므로 더 작은 작업이 더 효율적이라고 말합니다.

그러나 청크로만 실행할 수있는 경우 하나의 큰 작업으로 더 좋은 개요를 얻을 수 있습니다.

물론 성능도 문제입니다. 그러나 이것은 서버/시스템의 CPU 수와 전체 시스템의로드에 따라 크게 달라집니다. 우리가 알고 있었다고해도, 정확히 무엇을하고 있는지, 더 효율적인지 결정하기 위해 테스트해야합니다. 그러나 작업 초기화 및 관리에도 시간이 걸리고 작업이 실제로 작다면 실제 실행보다 작업 관리에 더 많은 시간을 투자 할 수 있습니다.

모든 작은 태스크를 병렬로 실행하면 응답 서버가 요청을 처리해야하기 때문에 어려울 수 있습니다. 웹 서비스는 대개 얼마나 많은 병렬 요청을 처리 할 수 ​​있는지에 대한 제한을 가지고 있음을 명심하십시오.

+0

대답 해 주셔서 감사합니다. 세 번째 단락을 고려할 때, 작업이 "충분히 큰지"를 어떻게 알 수 있는지 정확히 묻습니다. 필자는 병렬 실행의 성격과 동시 실행중인 작업의 수에 대해 걱정하지 않습니다. 태스크가 작거나 큰지 여부에 관계없이 실행 프로그램 작성시 쉽게 구성 할 수 있습니다. –

+0

ForkJoinPool이 당신을위한 솔루션입니다. 큰 작업을 작은 하위 작업으로 나눌 수 있습니다. 이 게시물을보십시오 : http://stackoverflow.com/questions/34613989/java-how-to-get-finished-threads-to-pickup-tasks-from-running-threads/34614276#34614276 –