HTTP를 통해 서버 측에 액세스하는 Java 클라이언트를 사용하여 새 데이터 페이지를 여러 번로드하는 몇 가지 작은 요청을 작성했습니다. 모든 비 UI 처리를 처리하는 스레드 풀을 유지하므로 백그라운드 클라이언트 측 작업과 서버에 연결하려는 모든 작업이 처리됩니다. 몇 가지 성능 문제를 조사해 봤는데 가능한 한 우리의 스레드 풀을 설정했는지 확신 할 수 없습니다. 현재 우리는 코어 풀 크기가 8 인 ThreadPoolExecutor를 사용하며 작업 대기열에 LinkedBlockingQueue를 사용하므로 최대 풀 크기는 무시됩니다. 의심의 여지가 없다는 간단한 모든 상황 에서이 특정 일을 대답하지만, 거기에 어떤 모범 사례가 있습니다. 그 순간 내 생각은Java RIA 클라이언트 응용 프로그램 용 스레드 풀을 구성하는 가장 좋은 방법
입니다. 1) LinkedBlockingQueue 대신 SynchronousQueue를 사용하여 풀을 최대 풀 크기로 확장 할 수 있습니다. 2) 최대 풀 크기를 무제한으로 설정하겠습니다.
기본적으로 현재 나의 두려움은 서버 측의 간헐적 인 성능 문제로 인해 관련없는 클라이언트 측 처리가 스레드 풀 크기의 상한으로 인해 중단되는 것입니다. 이를 경계하는 내 두려움은 클라이언트에서 이러한 스레드를 관리하는 데 추가 히트이며 아마도 2 가지 악 중 더 나은 것일 수 있습니다.
제안, 권장 사항 또는 유용한 참조 사항이 있으십니까? 건배, 로빈
바운드 형식의 큐를 만들 수 있지만 거부 작업을 (그리고 어쩌면 서버 (응용 프로그램에 의존!) 바쁜 사용자 통보) 큐가 일정한 크기에 도달 할 때하지 왜
SynchronousQueue는 블로킹 대기열입니다 (하나에서 다른 것으로 전환하겠다고 말했을 때) – Joel
ta, 나는 이것을 LinkedBlockingQueue (queueSize == corePoolSize 일 때 요청 대기) 및 SynchronousQueue (새 스레드를 poolSize
Robin