Leonardo,
Gostaria de complementar... a resposta do Filipe Souza se aplica bem a aplicações CPU Bound(uso intensivo de CPU). Contudo para aplicações I/O Bound(uso intensivo de operações de I/O) como disco, rede, download, etc... é recomendável utilizar mais threads do que o número de núcleos. Isso ocorre porque as threads ficam muito mais tempo dormindo do que executando e se vc tem muitas solicitações de recursos de I/O independentes é mais vantajoso solicitar o quanto antes. Mas não abuse, porque as threads são caras e se não balancear bem, como o Filipe falou sua aplicação pode ficar mais lenta.
Quanto à sua pergunta do número máximo de threads permitido... o sistema operacional define o número de threads máximo por processo. Em alguns contextos é possível aumentar/diminuir o número máximo de threads por processo a depender da permissão do usuário, etc...