Todo se reduce a hilos frente a procesos .
Los sistemas operativos se diseñaron específicamente para que cada "usuario" pensara que tenían toda la computadora para ellos solos, por lo que ejecuta apache como usuario wwwrun por ejemplo.
Los programadores, al ser programadores, comenzaron a sobrecargar ese paradigma, primero por cada usuario humano que ejecutaba múltiples 'trabajos'. Debido a que los sistemas operativos fueron diseñados para múltiples usuarios, el límite de escala superior de esa arquitectura reflejaba el límite de escala superior para usuarios registrados - por lo que apache, por ejemplo, comenzará a morir entre 4.000 y 8.000 usuarios.
Los procesos son un paradigma maduro (mi proceso no puede bloquear el suyo). Sin embargo, cuando comenzamos a ver la introducción de los hilos, las cosas empiezan a ser muy diferentes. Aquí tenemos programas que tienen actividades externas de bloqueo (esperar en el disco, esperar en io, esperar en la memoria) querer esperar por un lado, y trabajar en el otro y los hilos le permiten hacer esto y superar dos problemas:
no se puede conseguir suficientes procesos debido a que el sistema operativo no puede manejarlo
cada proceso es caro, ya que, por diseño, le da al 'usuario' toda la potencia del sistema operativo
El problema con hilos es que rompen la separación para la que se diseñaron los procesos. Mi hilo puede trash su hilo - los errores se propagan.
Donde Erlang es diferente es en una serie de aspectos. El PhD Thesis de Joe Armstrong se llama Fabricación de sistemas distribuidos fiables en presencia de errores de software.
La fiabilidad significa que los procesos son mejores que los hilos. El problema es que los procesos de los sistemas operativos son demasiado 'caros' porque están diseñados para humanos (usted es dueño de la máquina) y no como unidades de programas concurrentes. En la máquina virtual de Erlang, la máquina virtual tiene toda la potencia de un sistema multiusuario (se ejecuta en un proceso de sistema operativo) y cada proceso de Erlang tiene una cantidad de potencia concurrente mucho más pequeña: si quiere usar la "máquina grande", habla con la VM que lo hace por eso. Por lo tanto, los procesos de Erlang son mucho más baratos que los procesos operativos (y los hilos). Tu solo engendras, engendras, engendras. Las VM de Erlang comienzan de fábrica con 2 ** 8 procesos, pero puedes subir eso a millones (si tienes suficiente RAM).
Además, como Joe lo puso en la primera parte de la primera sección de su tesis de doctorado, para tener un software confiable, debe comenzar con dos computadoras. Con Erlang/OTP, al escribir el tiempo no sabe en qué computadora se ejecutará su software. El clúster Erlang/OTP, en tiempo de ejecución, asignará su trabajo computacional. Por lo tanto, un proceso de Erlang se distribuye de forma nativa, como spawn() (Erlang for fork()) y reinicia la semántica.
Como Erlang tiene sus propios procesos, tiene su propio programador y su propio formato de cargador de código/binario (Erlang puede interpretarse o puede compilarse en binarios nativos).Esto brinda un conjunto de beneficios adicionales: antes de escribir su aplicación Erlang/OTP, puede intercambiar en caliente sus binarios, etc.
Así que, seguro que puede escribir aplicaciones multiproceso en C++, pero es su responsabilidad de prevenir la propagación de errores y construir la estabilidad del sistema.
Y seguro, puedes construir un software confiable en C - mira a Erlang (la VM está escrita en C) el punto es ¿por qué querrías? En los viejos tiempos, las compañías escribían sus propios 'sistemas operativos', ahora puedes escribir tu propio sistema operativo, pero ¿por qué querrías? Hay millones de líneas de código robusto probado que 'lo hace', al igual que hay 1,5 millones de líneas de código robusto probado en el sistema Erlang/OTP que 'lo hace'.
El uso de Erlang se trata de usar las cosas que otras personas han escrito y construir solo los bits que hacen que su empresa sea efectiva.
Erlang no tiene 'hilos', tiene procesos Erlang. Pensar en los procesos de Erlang como 'hilos' es un error de categoría importante y te llevará por los caminos equivocados ... –
Yeap. Menciono 'hilo' solo para programadores que solo conocen C++ aquí. –
** Relacionado: ** http://stackoverflow.com/questions/2708033/technically-why-is-processes-in-erlang-more-efficient-than-os-threads – Jonas