O seu problema não está relacionado diretamente com o UDP. O problema é que um de seus núcleos está no máximo e alguns aplicativos envolvidos no seu uso do UDP não podem tirar proveito de mais de um núcleo. Suas escolhas são fazer um perfil / otimizá-lo para que ele faça seu trabalho com os recursos disponíveis ou para reprojetá-lo para usar vários encadeamentos ou vários processos para que ele possa aproveitar os outros núcleos.
Exatamente como você faz isso depende do que está errado com o código agora. Uma possibilidade é se o código parecer mais ou menos assim:
while(1)
{
do_udp_stuff(); // this is fairly simple
do_other_stuff(); // this is complex
}
Nesse caso, a solução é otimizar o do_other_stuff
ou movê-lo para um thread diferente.
Outra possibilidade é se o código se parece com isso:
while(1)
{
do_some_work_which_generates_a_UDP_Packet();
send_udp_patch();
}
// or
while(1)
{
receive_UDP_packet();
process_UDP_packet();
}
Neste caso, a solução pode ser ter mais de um thread fazendo o trabalho que gera o pacote UDP ou processando o pacote UDP.
Basicamente, você precisa reduzir a quantidade de CPU usada por pacote UDP ou aumentar a eficiência de utilização da CPU distribuindo o trabalho pelos núcleos.