Is it one TCP thread + one UDP thread per client? So this is a total of 1000 threads?? (which can definitely kill your CPU)
You shouldn't have more than one socket, and thus one thread, for UDP. One socket/thread per client is pure overhead.
Even one TCP thread per client is a lot to handle for your OS and CPU. Here you could try a selector instead, or non-blocking sockets + polling.
But anyway, you should profile your app. At least monitor your hardware to find the bottleneck: is the network traffic at its maximum? Is the CPU at 100%? ...