Productor JMS Single vs Multi-thread

Quería ver la diferencia de tiempo que supondría utilizar un productor multiproceso en lugar de uno único. Configuré un ActiveMQ en mi máquina local, escribí una clase de productor que inicializaría e iniciaría una conexión JMS en su constructor. Establecí el límite de mensajes en 3M y me llevó unos 50 segundos enviar todos los mensajes a ActiveMQ. Envié solo una cadena "hola mundo" 3M veces.

Luego utilicé el mismo objeto productor (una conexión pero varias sesiones) y lo ejecuté con un ExecutorService de tamaño de hilo ocho. En elrun método, dividiría 3M por 8 solo para asegurarme de que cada hilo no envíe más de 375000 mensajes. Tomó alrededor de 60 segundos para enviar todos los mensajes en este caso.

ExecutorService service = Executors.newFixedThreadPool(8);

    for (int i = 0; i < 8; i++) {

        service.execute(producer);
    }

Luego creé ocho productores con cada productor que tiene su propia conexión y los ejecuté con ExecutorService o tamaño de hilo ocho. Esta vez, tardó aproximadamente 68 segundos en enviar todos los mensajes de 3M.

for (int i = 0; i < 8; i++) {
        service.execute(new Producer());
    }

Me pregunto, ¿por qué un productor con un solo hilo funcionará mejor aquí? Ejecuté cada escenario unas 10 veces, pero los resultados siguieron siendo los mismos.

Respuestas a la pregunta(6)

Su respuesta a la pregunta