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.
Respuestas:
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.
fuente
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).
fuente