Rendimiento del software: ¿los algoritmos de cálculo se ejecutarán más rápido cuando se implementen en Node.js en lugar de C?

Node.js es un paradigma de paso de mensajes para hacer que los programas vinculados a IO sean más rápidos que sus programas simples de un solo subproceso equivalentes, no una nueva arquitectura de cómputo fundamental como Compute Unified Device Architecture (CUDA) u OpenCL. Al preguntar Node.js versus C, supongo que se pregunta cómo se compara el rendimiento de un programa interpretado por V8 con el rendimiento de un programa compilado con un buen compilador moderno de C, como GCC4 (o algo así como PathScale, que acaba de convertirse en SO [1, 2]). Dado que los puntos de referencia de V8 son similares a los de JVM [3], esto es como hacer la antigua pregunta Java versus C. Para eso, vea los puntos de referencia recientes de Google [4].

[1] http://www.pathscale.com/ekopath…
[2] http://www.pathscale.com/cbc.php
[3] https://github.com/adrusi/V8-JVM…
[4] http://research.google.com/pubs/…

Además de lo que dijo Alistair, me gustaría agregar que el algoritmo probablemente se ejecute más rápido en C que en Node.js.

El nodo es esencialmente JavaScript con un modelo de evento asíncrono. Por un lado, JavaScript es un lenguaje de script dinámico en oposición a C, un lenguaje estático; Esto significa que los algoritmos implementados en JS generalmente se ejecutan más lentamente que los de C. Por otro lado, con el modelo asíncrono de Node, la implementación de algoritmos síncronos, que incluyen básicamente todos los algoritmos de cálculo, podría bloquear todo el proceso y anular el propósito de ser asíncrono.

Por supuesto, muchos algoritmos de computación podrían implementarse de forma asincrónica para evitar la introducción de un bloqueo de proceso. Pero hacerlo generalmente no mejora el rendimiento ya que estos algoritmos generalmente no involucran la manipulación de dispositivos e IO.

Si desea hacer cálculos con Node, la mejor manera es escribir la lógica en C ++ y empaquetarla como un módulo Node. De esta forma, obtiene un buen rendimiento y utiliza el intervalo de tiempo entre los controladores de eventos asíncronos.

Lo más probable es que no, suponiendo algoritmos igualmente bien implementados. Es difícil responder sin más detalles para continuar, como qué tipo de algoritmos y el entorno de ejecución.

Posiblemente hay un pequeño malentendido sobre el caso de uso de Node.js aquí. Su principal fortaleza es la implementación de aplicaciones distribuidas asíncronas, aunque utilizando un motor Javascript muy rápido. C, por supuesto, es un lenguaje de uso general ampliamente utilizado para la programación de sistemas. Comparar los dos es un poco como comparar manzanas y naranjas.

More Interesting

¿Cuál crees que es el algoritmo de aprendizaje automático más inteligente?

¿Cuáles son las ventajas y desventajas de los algoritmos y la heurística en la resolución de problemas?

Cómo verificar si existe una ruta simple entre los nodos a y b de modo que pase a través del nodo c

Cómo visualizar algunas estructuras de datos básicos y algoritmos

¿Cuál es el algoritmo más genial (programación competitiva) que hayas encontrado?

Si un algoritmo se ejecuta en tiempo O (N), pero N no excede una constante, ¿puedo decir que el algoritmo se ejecuta en tiempo constante?

¿Cuál sería el mejor enfoque para encontrar la distancia entre dos nodos de un árbol?

Cómo encontrar las rutas que cubren todos los vértices dados (también se conocen el vértice inicial y final) en un gráfico cuyos bordes tienen peso y dirección

¿Cuál es la diferencia entre Manhattan y las medidas de distancia euclidiana?

¿Qué significa que el algoritmo TD (en el aprendizaje por refuerzo) hace predicción y no control?

Cómo resolver un problema de puente colgante utilizando circuitos y dónde una persona puede cruzar el puente a la vez

¿Cómo pasan su tiempo exactamente los participantes en varios sitios de codificación de algoritmos?

Cómo aprender estructuras de datos y algoritmos para empezar

Se da una matriz (n). La matriz puede atravesarse por saltos de tamaño <= k. Si en el índice i, un salto puede aterrizar en cualquier lugar desde i + 1 hasta i + k index.

¿Podemos tener un árbol binario cuyo recorrido posterior y posterior sea el mismo?