El tema es mas complejo de lo que parece. Hay tareas que por su misma naturaleza no admiten una paralelización de forma sencilla, hablamos por ejemplo de tareas de iteración donde no puedes hacer una nueva operación hasta concluir la anterior, porque el resultado lo necesitas para continuar (es solo un ejemplo, hay muchas mas). Por otro lado hay tareas de calculo repetitivo que son fácilmente divisibles entre diferentes procesadores e incluso ordenadores. Por ejemplo el renderizado 3D para animaciones es una tarea de ese estilo. Puedes tener tantos ordenadores como quieras trabajado en diferentes escenas, no es preciso que uno solo las haga todas.
Por otro lado la programación en multihilo es mas compleja que la de simple hilo. Con lenguajes de alto nivel y a base de "fuerza bruta" lo es algo menos, pero siempre es mas compleja. Trabajando con lenguajes de bajo nivel o intentando aprovechar al máximo la potencia (lo que implica bajo nivel igualmente) la programación multihilo es mucho mas complicada. Mas complicada implica mas tiempo de desarrollo, mas cara para entendernos.
Por otro lado la programación en multihilo es mas compleja que la de simple hilo. Con lenguajes de alto nivel y a base de "fuerza bruta" lo es algo menos, pero siempre es mas compleja. Trabajando con lenguajes de bajo nivel o intentando aprovechar al máximo la potencia (lo que implica bajo nivel igualmente) la programación multihilo es mucho mas complicada. Mas complicada implica mas tiempo de desarrollo, mas cara para entendernos.