Las arquitecturas de computadores están tendiendo a incluir cada vez más núcleos y/o procesadores por máquina como método de incrementar la capacidad computacional de cada unidad. La posibilidad de realizar múltiples tareas simultaneamente mediante hardware no es inmediatamente traducida al software, pues las aplicaciones deben ser diseñadas para aprovechar estas nuevas capacidades, mediante el uso de hebras y/o procesos.