What are the differences between TCP and UDP socket programming, and when would you choose one over the other in a high-throughput system?