multithreading ponylang

python multithreading



¿Qué construcciones no son posibles usando el modelo sin bloqueo de Ponylang? (2)

[...] ¿hay operaciones posibles con un lenguaje basado en bloqueo que no sea traducible al sistema basado en tipos de ponylang?

El punto principal con capacidades de referencia, en Pony, es evitar que hagas cosas que son posibles e incluso triviales, en otros idiomas, como compartir una lista entre dos hilos y agregarle elementos simultáneamente. Entonces, sí, en lenguajes como Java, puedes compartir datos entre hilos de una manera que es imposible en Pony.

Además, ¿existen operaciones de este tipo que no se puedan traducir en construcciones eficientes en Ponylang?

Si está preguntando si los lenguajes basados ​​en bloqueo pueden ser más eficientes en algunas situaciones que en Pony, entonces creo que sí. Siempre puede crear una situación que se beneficie de N subprocesos y 1 bloqueo y es peor cuando usa el modelo de actor que lo obliga a pasar información en los mensajes.

Esto no es ver el modelo de actor como superior en todos los casos. Es un modelo diferente de concurrencia y los problemas se resuelven de manera diferente. Por ejemplo, para calcular los valores de N y acumular los resultados en una lista:

  • En un modelo de hilo lo harías
    1. crear un grupo de hilos,
    2. crear una lista segura de subprocesos,
    3. Crear N tareas compartiendo la lista, y
    4. espera a que termine N tareas.
  • En un modelo de actor lo harías.
    1. crear un actor A esperando por N valores,
    2. crear N actores B compartiendo el actor A, y
    3. esperar a que A produzca una lista.

Obviamente, cada tarea agregaría un valor a la lista y cada actor B enviaría el valor al actor A. Dependiendo de cómo se transmitan los mensajes entre los actores, puede ser más lento enviar valores N que bloquear N veces. Por lo general, será más lento pero, por otro lado, nunca obtendrá una lista con un tamaño inesperado.

Ponylang es un nuevo lenguaje que está libre de bloqueos y de datos. Mi impresión es que para lograr esto, Ponylang mira la oración "si dos hilos pueden ver el mismo objeto, las escrituras deben prohibir cualquier otra operación por otro hilo", y utiliza un sistema de tipos para imponer los diversos casos especiales. Por ejemplo, hay un descriptor de tipo que dice "ningún otro hilo puede ver este objeto" y otro que dice "esta referencia es de solo lectura", y varios otros. Es cierto que mi comprensión de esto es bastante pobre, y la documentación de Ponylang es breve en ejemplos.

Mi pregunta es: ¿existen operaciones posibles con un lenguaje basado en bloqueo que no se pueda traducir al sistema basado en tipos de Ponylang? Además, ¿existen operaciones de este tipo que no se puedan traducir en construcciones eficientes en Ponylang?


Creo que puede hacer todo lo que puede hacer un todo compartido + bloqueos. con solo los objetos iso y consume es básicamente un sistema de paso de mensajes que puede hacer cualquier cosa que haga un sistema de bloqueo. Como en Mach3 podemos hacer cualquier cosa que Linux pueda hacer.