Java: compartir trabajadores en el grupo de subprocesos para varias tareas recursivas

Hay un grupo de subprocesos fijos (que sea de tamaño = 100), que quiero usar para todas las tareas en mi aplicación. Se usa para limitar la carga del servidor.

Tarea = rastreador web, que envía el primer trabajo al grupo de subprocesos.
Ese trabajo puede generar más trabajos, y así sucesivamente.
Un trabajo = una solicitud de E / S HTTP.

Problema
Suponga que solo hay una tarea de ejecución, que generó 10000 trabajos.
Esos trabajos ahora se ponen en cola en la cola del grupo de subprocesos, y los 100 subprocesos se usan para su ejecución.

Supongamos que ahora presento una segunda tarea.
El primer trabajo de la segunda tarea es 10001 en la cola.
Se ejecutará solo después de los 10000 trabajos que la primera tarea puso en cola.
Entonces, esto es un problema: no quiero que la segunda tarea espere tanto tiempo para comenzar su primer trabajo.

Idea
La primera idea en mi mente es crear un BlockingQueue personalizado y pasarlo al constructor del grupo de subprocesos.
Esa cola contendrá varias colas de bloqueo, una para cada tarea .
Su método de toma elegirá una cola aleatoria y tomará un elemento de ella.
Mi problema con esto es que no veo cómo eliminar una cola vacía de esta lista cuando finaliza su tarea. Esto significaría que algunos o todos los trabajadores podrían quedar bloqueados en el método de toma, esperando trabajos de tareas finalizadas.

¿Es esta la mejor manera de resolver este problema?
No pude encontrar ningún patrón en los libros o en Internet :(

¡Gracias!

Respuesta 1

Estoy configurando un nuevo proyecto maven en la instancia de GCP, tengo cierta dependencia maven para apache pulsar. Ehat es la solución adecuada para crear un proyecto maven o descargar una dependencia en la instancia de GCP. ...

Estoy haciendo un juego en Android usando opengl-es, usando múltiples hilos: class World {AtomicInteger final estático protegido entityLock = new AtomicInteger (); entidades privadas de GameEntity []; ...

Hice mi programa con Jsoup donde configuré el archivo jar en mi intellij. He seguido las instrucciones sobre cómo compilar Java cuando necesita un archivo jar externo en cmd usando javac -cp C: \ Users \ ...

El siguiente es el código que usé para entrenar a mi modelo. Después de eso, ¿cómo y dónde puedo guardar mi modelo y volver a leerlo que no sea la clase FileExporter? ¿está solo en un archivo o puedo almacenarlo en un caché ...