A method comprising: receiving, at a server computer system, a plurality of messages (103A-C), each message including a network address of a recipient computer (120A-C); sending, by the server computer system over a network, the plurality of messages (103A-C) to the recipient computers (120A-C), each of the plurality of messages (103A-C) being sent by a thread of a plurality of threads executing on the server computer system, wherein the thread is required to wait for a confirmation response (107A-C) from the corresponding recipient computer (120A-C) before sending another message of the plurality of messages (103A-C); determining a latency time for the confirmation response to be received by the server computer system for each of the plurality of messages; receiving, at the server computer system, a first message including a first network address of a first recipient computer (120A-C); determining whether other messages have previously been sent to the first network address of the first recipient computer (120A-C); after determining that other messages have previously been sent to the first network address: determining a latency value for the confirmation response to the other messages associated with the first network address; comparing the latency value to a first threshold; determining whether to place the first message in a first latency queue or in a second latency queue based on the comparing of the latency value to the first threshold, wherein different threads of the plurality of threads are allocated to the first latency queue or the second latency queue, wherein messages for recipient computers with latency values less than or equal to the first threshold are allocated to the first latency queue and messages for other recipient computers with latency values greater than the first threshold are allocated to the second latency queue; and dynamically changing a number of threads allocated to the first latency queue and the second latency queue based on a first number of messages in the first latency queue and based on a second number of messages in the second latency queue. receiving, at a server computer system, a plurality of messages (103A-C), each message including a network address of a recipient computer (120A-C); sending, by the server computer system over a network, the plurality of messages (103A-C) to the recipient computers (120A-C), each of the plurality of messages (103A-C) being sent by a thread of a plurality of threads executing on the server computer system, wherein the thread is required to wait for a confirmation response (107A-C) from the corresponding recipient computer (120A-C) before sending another message of the plurality of messages (103A-C); determining a latency time for the confirmation response to be received by the server computer system for each of the plurality of messages; receiving, at the server computer system, a first message including a first network address of a first recipient computer (120A-C); determining whether other messages have previously been sent to the first network address of the first recipient computer (120A-C); after determining that other messages have previously been sent to the first network address: determining a latency value for the confirmation response to the other messages associated with the first network address; comparing the latency value to a first threshold; determining whether to place the first message in a first latency queue or in a second latency queue based on the comparing of the latency value to the first threshold, wherein different threads of the plurality of threads are allocated to the first latency queue or the second latency queue, wherein determining a latency value for the confirmation response to the other messages associated with the first network address; comparing the latency value to a first threshold; determining whether to place the first message in a first latency queue or in a second latency queue based on the comparing of the latency value to the first threshold, wherein different threads of the plurality of threads are allocated to the first latency queue or the second latency queue, wherein messages for recipient computers with latency values less than or equal to the first threshold are allocated to the first latency queue and messages for other recipient computers with latency values greater than the first threshold are allocated to the second latency queue; and dynamically changing a number of threads allocated to the first latency queue and the second latency queue based on a first number of messages in the first latency queue and based on a second number of messages in the second latency queue.