La interfaz de paso de mensajes (MPI) (http://www-unix.mcs.anl.gov/mpi/) es una biblioteca altamente escalable y robusta para programación paralela, orientada originalmente hacia C pero ahora disponible en varios sabores http://en.wikipedia.org/wiki/Message_Passing_Interface#Implementations. Si bien la biblioteca no introduce una sintaxis nueva, proporciona un protocolo de comunicación para orquestar el intercambio de datos entre rutinas que son paralelizables.
Tradicionalmente, se usa en la computación en clúster grande en lugar de en un solo sistema para la concurrencia, aunque los sistemas multi-core ciertamente pueden aprovechar esta biblioteca.
Otra solución interesante al problema de la programación paralela es OpenMP, que es un intento de proporcionar una extensión portátil en varias plataformas para proporcionar pistas al compilador sobre qué secciones de código son fácilmente paralelizables.
Por ejemplo (http://en.wikipedia.org/wiki/OpenMP#Work-sharing_constructs):
#define N 100000
int main(int argc, char *argv[])
{
int i, a[N];
#pragma omp parallel for
for (i=0;i<N;i++)
a[i]= 2*i;
return 0;
}
Hay ventajas y desventajas de ambos, por supuesto, pero el primero ha demostrado ser un gran éxito en el mundo académico y otras aplicaciones de computación científica pesados. YMMV.
La principal dificultad aquí es que, si bien puede recibir mensajes en otros idiomas, es extremadamente difícil imitar el uso de grandes cantidades de procesos por parte de Erlang. Los procesos de desove en Erlang son similares a crear instancias de objetos en Java o Python: no pienses en ello. Si hace esto en el nivel del sistema operativo, se le acabarán rápidamente los recursos, lo que significa que no solo se trata de pasar mensajes, sino también de agruparlos, lo que se debe trabajar en la arquitectura. La máquina virtual de Erlang es un poco difícil de seguir en este sentido. Por supuesto, no todos los problemas necesitan millones de procesos simultáneos. – zxq9