2011-12-20 11 views
12

Estoy reescribiendo mi servidor y decidiendo entre usar Node.js y Python.Node.js vs Python

Prefiero Javascript (ya que estoy muy bien versado en él) pero this article me está dando una pausa. Tengo curiosidad por si alguien ha tenido algún problema, pero también tengo curiosidad acerca de si hay virtudes relacionadas con la plataforma para una sobre la otra.

En concreto, realice una de ellas no-soporte/límite/Excel-en

  • MySQL llama
  • interacción imageMajik
  • llamadas fuera del sistema para la manipulación del sistema de archivos
  • llamadas a la web a través de WGET/Curl cualquier cosa
  • puede pensar en que los procesos CGI normales tienen que tratar.

No quiero empezar una discusión sobre las virtudes de PHP o .NET, he tomado una decisión definitiva para mover a cualquiera de Python o Node.js y fue totalmente asentado en Node.js, hasta que lee el artículo anterior, así que, en realidad, solo estoy buscando problemas/virtudes específicos que las personas hayan tenido con estas dos herramientas.

Gracias de antemano.

+2

El punto principal que obtuve del artículo (si elige entre los divagaciones sin sentido y los insultos) es que el código sub-estándar escrito por los programadores principiantes puede bloquear fácilmente en Nodo, a pesar de que utiliza IO no bloqueante. Es una herramienta poderosa que muchas, muchas personas y compañías están usando con éxito pero usted debe saber lo que está haciendo. –

+4

El artículo solo muestra una cosa: puede escribir código incorrecto en node.js. IMO la idea general de node.js es excelente, pero como todo, se puede abusar. – CodesInChaos

+3

Derecha, que por supuesto se aplica a cualquier idioma ... –

Respuesta

19

Hay dos cuestiones aquí:

  1. La elección del lenguaje. Tendrá que decidir por sí mismo si prefiere python o javascript, y cuál ofrece las bibliotecas que desea. No puedo ayudarte con esa parte de la decisión.
  2. La elección del modelo IO.

A diferencia de lo que sugiere el artículo, un modelo de E/S no roscado de una sola rosca no es malo en principio. Personalmente, me gusta mucho este modelo, ya que elimina las complejidades del multihilo mientras sigo trabajando en un modelo de memoria compartida.

Otra ventaja de este modelo es que, debido a que no necesita un hilo por solicitud, puede tener muchas solicitudes concurrentes abiertas.

Una desventaja es que sin soporte de idiomas, necesita poner en cola explícitamente las continuaciones, en lugar de escribir el código de una manera simple e imperativa. C# 5 ataca este problema con su característica async-await, y no me sorprendería si node.js ofreciera algo similar en el futuro.

El artículo habla principalmente sobre la segunda desventaja: si bloquea el hilo principal, bloquea todo el servidor.

Uno de sus ejemplos es simplemente abuso: Implementa una espera ocupada, en lugar de suscribirse a un evento. Con la programación correcta, esto simplemente no debería suceder.

El otro ejemplo tiene más de un punto: si tiene cálculos intensivos de CPU, es mejor que no los haga en el hilo principal. La solución simple a esto es hacer girar un hilo de trabajo, que hace el cálculo sin tocar la memoria utilizada por el hilo principal. Y una vez hecho, llama a una devolución de llamada en el hilo principal. No estoy seguro si node.js ofrece esto sin embargo. Pero dado que muchas aplicaciones de servidor no están vinculadas a la CPU, esto a menudo no es un problema en absoluto.

En general, ese artículo es de muy baja calidad, y dice más sobre el autor que sobre node.js. No debes dejar que influya en tu decisión.

+5

Creo que el punto principal del artículo es que el punto de venta principal de node.js, que es su sistema asincrónico controlado por eventos, no hace automáticamente que un programador no tan experto pueda escribir un sistema rápido como decía ser. Es bastante imaginable que un programador ignorante haga llamadas de bloqueo en el hilo principal, lo que bloqueará todo el servidor, lo que provocará una desaceleración para todos en lugar de solo el controlador de solicitudes actual. –

+0

Sí, Node.js ** does ** ofrece devoluciones de llamada para subprocesos al igual que cualquier otra función asincrónica en JavaScript. – trusktr

+1

No debe olvidar que generalmente tiene múltiples procesos ejecutándose incluso en Python para ayudar con el problema principal ocupado por el hilo (ver https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/uwsgi/) – Wernight