2011-01-05 15 views
5

Tengo dos preguntas de novato:¿Qué sucede si un hilo se cuelga en un proceso?

1) ¿Por qué node.js se está ejecutando en una sola conversación? ¿por qué no solo usa el proceso en sí? O ¿Cuáles son las ventajas de ejecutarlo en un hilo en lugar de en proceso?

2) ¿Qué sucede si un subproceso en un proceso se bloquea (soy consciente de que, excepción no manejada provocará que el proceso salga), pero qué pasa si es correctamente capturado? o con excepciones como excepciones de puntos flotantes. ¿El proceso también se bloquea?

Respuesta

3

Creo que está un poco confundido acerca de qué significa "single threaded" en este caso. Node.js utiliza múltiples hilos en segundo plano para manejar llamadas que de otra manera serían asíncronas.

El núcleo de Node.js, el motor de JavaScript, tiene un solo subproceso. La falta de multiprocesamiento y la disponibilidad de un ciclo de eventos hace que la programación sea mucho más sencilla. En resumen, no tiene que lidiar con todos los problemas de concurrencia que conlleva el multi-threading, su código es mucho más determinista de esta manera.

En caso de que un hilo falle es completamente irrelevante si este fue el único o uno de muchos, si el código falla, lo mejor que puede esperar es que el programa fallezca, nada sería más problemático que tener un programa continuar corriendo con estado parcialmente corrupto. Imagina que el hilo que se cuelga fue responsable de guardar los datos en el disco, y ahora tu programa continúa ejecutándose sin volver a guardarlo.

0
  1. node.js está diseñado para ser extremadamente liviano, y solo se utiliza cuando es necesario. Entonces, cada subproceso maneja una solicitud y luego sale. Si llama a/mypage, node.js procesará la solicitud y luego finalizará. Esto da como resultado un mejor rendimiento al tiempo que mantiene una huella pequeña
  2. Si hay una excepción, y se maneja correctamente, arrojará un error de acuerdo con la forma en que la definió. Javascript es todo o nada de idioma. Cualquier error ocasionará que javascript arroje un error y se bloquee, por eso es necesario que se asegure de manejar todos los errores posibles.
0

Ejecutar un programa en un proceso o un solo subproceso es la misma cosa. Cada proceso tiene un hilo principal. Según el lenguaje de programación y la plataforma, se pueden usar hilos adicionales para ejecutar partes de su programa al mismo tiempo. Node.js no tiene la posibilidad de iniciar subprocesos adicionales.

De esta manera, no tiene la posibilidad de ejecutar partes de su programa en paralelo además de iniciar nuevos procesos. Múltiples hilos en un solo proceso comparten la misma memoria, mientras que los procesos no. Cuando necesite compartir información entre procesos, debe usar la transferencia de mensajes.

La desventaja de la transmisión de mensajes es que es más lenta que compartir información a través de la memoria. La ventaja es que no tiene que razonar sobre el estado mutable de los objetos en su memoria y cómo asegurarse de que esos objetos no se vuelvan inconsistentes.

Cuestiones relacionadas