Não vejo por que isso não seria possível - o sistema certamente pode manipular 200 tarefas paralelas.
No entanto, quase certamente não é desejável, a menos que haja algum motivo específico para o número exato de tarefas executadas em paralelo. Isso parece improvável; a única razão pela qual eu poderia ver seria porque você precisa de todas elas ao mesmo tempo, porque elas precisam trocar informações ou trocar informações com algo mais de forma caótica e indeterminada (por exemplo, para testar um programa de servidor).
A razão pela qual não é desejável de outra forma é porque o estado ideal, em termos de eficiência, é para o sistema executar um número de processos igual ao número de núcleos de processador disponíveis. Como os processos, em certa medida, costumam envolver gargalos fora da CPU - por exemplo, E / S de disco - este número ideal generalizado varia de acordo com o número de núcleos + 1 até o número de núcleos * 2.
A razão pela qual esta é a eficiência ideal do estado é que se uma tarefa consome 1 milhão de unidades de tempo do processador, executar a mesma tarefa 10 vezes sequencialmente consome 10 milhões de unidades e executar a mesma tarefa em paralelo consome 10 milhões de unidades . No entanto, no último caso, se houver menos de 10 CPUs,
há um custo adicional porque o sistema deve alternar constantemente de uma tarefa para outra.
É também por isso que geralmente um sistema com 2 x 2 Ghz é mais rápido que um sistema com 4 x 1 Ghz. A principal razão para a evolução dos sistemas multi-core é porque se torna cada vez mais difícil fabricar CPUs cada vez mais rápidas, e além de um certo ponto relativamente baixo, é impossível. Portanto, a solução é fabricar sistemas com mais núcleos de processador.
Em suma, se você precisa fazer 20 coisas o mais rápido possível e você tem 4 núcleos, a maneira mais rápida de fazer isso é fazê-los em 5 conjuntos de 4 ou 4 conjuntos de 5 para permitir o tempo ocioso de esperar no I / O.
parallel
permite que você alimente uma lista de comprimento indefinido, mas limita o número de tarefas executadas de uma vez (e observe que o padrão para esse número é o número de núcleos).
Há um tipo de exceção a isso, embora geralmente se refira a certos tipos de programas multithread (como um monte de programas separados, mas um programa que ocupa vários núcleos). Isso ocorre porque quando um programa pode fazer alguma coisa fazendo isso com ramificações relativamente independentes que precisam apenas coordenar ocasionalmente ("ocasionalmente" pode ser tão freqüente quanto 10 ou 20 vezes por segundo), é muito mais fácil e muitas vezes mais flexível , para projetar o programa para fazer isso em encadeamentos independentes do que desenhá-lo para efetuar o ciclo das tarefas de maneira arbitrária (asrícrona). Programas graficamente intensos e / ou interativos, como videogames e sistemas CAD, se enquadram nessa categoria.