¿Las abstracciones de simultaneidad emulan los procesos de UNIX?

8

Bien, estaba reflexionando sobre esto hoy, y he venido a pedir opiniones completamente subjetivas y sesgadas al respecto. Paradójicamente, a pesar de esto, tampoco creo que sea carne de guerra de fuego. Creo que hay espacio para una conversación perfectamente civilizada: apenas es Vim vs Emacs.

He usado muchas abstracciones de concurrencia, específicamente aquellas construidas sobre hilos. Hay una gran tendencia entre ellos, ya sea que pase mensajes, que sea inmutable por defecto o que sea hilo local por defecto u otros.

La tendencia es que todos están invirtiendo la idea de hilos al hacer que el intercambio de datos sea explícito en lugar de implícito. Es decir, todos los datos no se comparten a menos que se especifique lo contrario, que es lo contrario de los hilos tradicionales que se encuentran en lenguajes como Java. (Sé que Java admite sus propias abstracciones de concurrencia de nivel superior). Por ejemplo, pasa mensajes explícitamente. Usted declara explícitamente qué variables son locales de hilo. Usted declara explícitamente qué variables son mutables. Estos son solo algunos ejemplos encontrados en algunos idiomas.

Pensé que este estilo fácil de concurrencia era un concepto moderno. Estaba equivocado. Empecé a jugar con juguetes UNIX como fork () y pipe () recientemente, y me sorprendió descubrir que existen mecanismos de concurrencia explícitos y sin esfuerzo desde el comienzo de UNIX.

Hay algo un poco extraño en darse cuenta de que C + UNIX de los años 70 hace que la concurrencia sea mucho más fácil que muchos mecanismos de subprocesos modernos y modernos.

Entonces, esto es lo que me pregunto ... ¿son estas abstracciones de hilos modernas simplemente tratando de emular procesos de estilo UNIX en la parte superior de los hilos, con todos sus rasgos explícitos y no compartidos por defecto? Sé que algunos mecanismos como STM ofrecen cosas como las transacciones de estilo DB, que es realmente una solución moderna e innovadora para la concurrencia, pero la mayoría parecen nuevas formas de hacer lo que los codificadores de UNIX estaban haciendo hace mucho tiempo.

Solo para decir, no soy un fanático de UNIX, no por ningún tramo de imaginación. Soy consciente de que los procesos son mucho más lentos que los hilos para inicializarse en muchas plataformas, pero estoy hablando de esto desde una base conceptual.

Louis
fuente
No es una mala pregunta, pero su problema es: "Creo que hay espacio para la conversación".
Agregué eso para que no se cerrara de inmediato como subjetivo / obstinado :) Estoy realmente interesado en escuchar los pensamientos de las personas sobre esto ...
buena pregunta. Creo que te estás perdiendo una audiencia más grande para la pregunta al dejar una etiqueta de lenguaje de programación (aunque entiendo por qué lo haces). Puede obtener comentarios adicionales al incluir una etiqueta como rendimiento, prueba o evaluación comparativa. Es posible que haya otras etiquetas que no conozco que amplíen sus respuestas (¿alguien?). ¡Buena suerte!
shellter
recomendaría eliminar la etiqueta de unix ya que su pregunta claramente no está restringida al dominio de unix muchas personas tienen sistemas operativos específicos en sus etiquetas de ignorar (como yo con OS-X).
Bernd Elkemann
Creo que es más probable que las abstracciones de concurrencia estén "emulando" (más precisamente, se basan en) la teoría de los procesos secuenciales de comunicación
mosquito

Respuestas:

1

Buena observación, definitivamente hay una tendencia hacia el intercambio explícito (ya sea a través de lenguajes funcionales o convenciones). El comentario acerca de que los procesos son más lentos, me adaptaría un poco: son más pesados , lo que significa que no se ejecutan más lentamente en el rendimiento sin procesar, pero cada cambio entre ellos lleva mucho más tiempo que el cambio entre hilos. Usted ya reconoció que hay otras formas de concurrencia y reconoce STM . Solo agregaría que hay (además de compartir explícitamente y STM) también hay una tendencia creciente hacia la agrupación de hilos (tarea paralela; asigne tareas a subprocesos de trabajo que se iniciaron de antemano y recíclelas): Definitivamente el camino a seguir en cuanto al rendimiento y curiosamente un enfoque diferente para compartir explícitamente porque los subprocesos agrupados generalmente están en un solo proceso.

Bernd Elkemann
fuente
Modifiqué la línea de actuación para adaptarla a lo que dijiste Curiosamente, a veces uso ProcessPool en Python, que es como una agrupación de subprocesos, excepto que es un conjunto de procesos, no subprocesos. Incluso en Windows parece funcionar sin problemas. Por otra parte, no lo he estado presionando demasiado. Me imagino que los grupos de procesos son una buena manera de hacer concurrencia en idiomas con tiempos de ejecución que no tienen la esperanza de ser multiproceso en el corto plazo ( tos GIL tos ).
Sin embargo, es extraño que un grupo de subprocesos a menudo use un proceso: habría pensado que lo habrían dividido en tantos procesos como núcleos de CPU.
1
@Louis: cada hilo puede ejecutarse en un núcleo diferente.
ninjalj
@ninjalj: Lo siento, un momento de muerte cerebral por mi parte allí. Supongo que todavía estaba pensando inconscientemente en los grupos de procesos.
Dado que esta respuesta da toneladas de información, la marcaré como aceptada. Indicando una respuesta es 'aceptado' en un contexto subjetivo se siente un poco raro, pero siento que es justificada :)
2

Creo que se trata menos de que X emule a Y, que de tratar de encontrar un equilibrio.

Los procesos completamente separados mantienen la vida relativamente simple. Facilitan la creación de elementos como tuberías de procesos que aprovechan al menos alguna ventaja de los procesadores múltiples. Sin embargo, también hay algunas desventajas bastante obvias, particularmente la falta de flexibilidad y bastante sobrecarga.

Un proceso único con múltiples subprocesos de ejecución que comparte esencialmente todos los recursos esencialmente los revierte: menos gastos generales y mucha flexibilidad, a costa de ser más difícil de diseñar y / o mantener estable.

En su mayor parte, lo que sucede es que las personas están trabajando para encontrar un término medio que brinde casi la flexibilidad y la velocidad de los hilos, con un diseño más simple y un resultado más estable de procesos separados (y, creo que están teniendo mucho éxito, para al menos algún grado).

Jerry Coffin
fuente