Dat betekent dat je handmatig 1000 nuttige threads moet maken die allemaal evenveel werk doen. Dat is niet te doen.
Maar wat is dan jou definitie van handmatig? Bedoel je met automatisch dat de compiler uit sequentieele code threads voor jouw genereerd of bedoel je wat anders?
Als ik 1000 problemen heb in een queue, en ik maak 1000 threads aan in een andere queue en vervolgens bind ik deze aan elkaar en laat ze werken, dan heb ik dit 'handmatig' gedaan, maar het is niet bijzonder veel werk.
Een en 't ander (zoals ook vermeld in artikel) hangt dus sterk af van de aard van je probleem en het aantal instanties. Mandelbrot berekeningen kun je lekker makkelijk paralleliseren. Ook genetische algortimen doen het goed: maak een instance van je populatie aan met random initieele parameters, laat 1 populatie per thread groeien, en stuur af en toe een individu over tussen de populaties. Volila; met 1 algortime en een beetje extra code voor communicatie versnel je het zoeken naar de oplossing zo met een factor 1000 en bereik je theoretisch nog een beter resultaat ook dan dat je 1000 keer zo lang wacht.
Werk je echter met een model waarbij je functionele onderdelen van een applicatie naar threads mapped, tsja, dan is het inderdaad niet te doen om 1000 threads nuttig te laten werken. Stel bijvoorbeeld een multi-media app voor waarbij de interface 1 thread is, de backend 1 thread, de netwerk module 1 thread, de sound module 1 thread en de video renderer 1 thread. Volgens een dergelijke indeling wordt meer threads toevoegen steeds moeilijker en krijg je steeds meer te maken met overhead kosten en complexiteit.