비동기 큐 소비자 스레드에 대한 알고리즘을 조합하는 데 문제가 있습니다. 즉, 하나의 큐에서 항목을 읽음으로써 길게 수행해야하는 경우 적어도 몇 초 정도 작동해야합니다. 메시지 유형에 따라 처리 리소스가 다른 큐의 메시지 사용
는 근본적으로 볼 수있는 큐는 다음과 같다 : A, A, A, A, A, B, B, A, B, A, A, A, A, A, C, B, A.예. A 메시지는 다른 메시지보다 훨씬 더 일반적입니다.
Google 시스템의 각 메시지 유형마다 다른 동시성 값이 있습니다 (예 : 한 번에 3 x A 메시지 만 실행할 수 있지만 5 x B 및 4 x C 메시지를 한 번에 실행할 수 있습니다.
현재의 (깨진) 알고리즘은 큐의 전면에서 단일 스레드를 읽고 각 작업의 본문을 실제 페이로드를 실행하기 전에 사용할 수있을만큼 충분한 리소스를 기다리는 상태로 각 작업을 스레드 풀로 디스패치하는 것입니다.
즉, 충분한 A 메시지가 먼저 도착하면 스레드 풀 대기열을 "채울"수 있으며 B + C 메시지는 필요한 것보다 훨씬 오래 지연됩니다.
지금까지 각 메시지 유형 (상당히 낮은 유형 수)에 대해 별도의 스레드 풀을 사용하는 것에 대해 생각해 보았습니다.하지만 많은 스레드를 유지하는 효율성에 대해 우려하고 있습니다.
내가 어떻게 개선 할 수 있을지에 대한 제안 사항이 있으십니까?
* 특정 클래스의 작업을 순서대로 실행하는 것이 좋습니다. * 작업 대기열을 유지하기 위해 대기열이 예입니다. * 그 (것)들은입니다. * 항상 그렇지는 않지만 큐가 비어있을 수 있습니다. 적용되는 빈 포장에 대한 특정 링크가 있습니까? 나는 그 문제 영역에 대한 아이디어를 얻었고 그것이 어떻게 관련되어 있는지 보지 못한다고 확신한다. 감사! –
주어진 시간에 실행할 작업 집합과이를 실행할 리소스가 있습니다. 각 작업에는 비용이 들며 초과하지 않고 실행중인 작업의 가치를 극대화 할 수있는 최상의 작업 집합을 실행하려고합니다 이용 가능한 자원. 배낭 문제는 값을 최대화하도록 작업 집합을 선택하는 방법을 보여줍니다. – Jackson