2011-01-26 10 views
6

¿Alguien podría darme algunos consejos sobre la mejor manera de aprender a hacer una programación de latencia muy baja? Tengo muchos libros de programación pero nunca he visto uno que se haya centrado (o ayudado) en escribir un código extremadamente rápido. ¿O los libros no son la mejor manera de avanzar?¿La mejor manera de aprender a escribir latencia crítica, código rápido C++/Java/C#?

¡Algún consejo de un experto sería realmente apreciado!

EDIT: Creo que me refiero más a CPU/memoria encuadernada.

+4

Depende de qué código es? ¿Está vinculado el código IO o cpu? No tiene sentido tener un montaje hecho a mano si va a estar esperando en una base de datos y no tiene sentido tener un sistema de archivos estándar de Google si todo lo que quiere hacer es escribir un archivo de texto. –

+3

La respuesta para un solo idioma tomaría libros y usted espera obtener respuestas para C++/Java/C#: eso tomará librerías. Así que supongo que necesitarás concertar tu pregunta si esperas algunas respuestas. –

+4

Paso 1: Escribir programa. Paso 2: medir el rendimiento. Paso 3: si el rendimiento es basura, optimízate en los puntos calientes. Paso 4. Ir al paso 2. –

Respuesta

4

Mi consejo sería aprender cómo funciona C++/Java/C# y obtener una idea general de cómo se traduce en instrucciones a nivel de máquina. Algunas operaciones son más caras que otras. Un pequeño fragmento de código en un lenguaje de alto nivel se traduce en un montón de instrucciones de la máquina (a menudo más de lo que podría pensar).

Además, asegúrese de conocer las diversas estructuras de datos, para qué sirven y sus características de rendimiento para varios tamaños de problema. Elegir la estructura de datos correcta para el problema puede hacer maravillas para la velocidad de ejecución.

1

Comience por aprender a ensamblar. Entonces, si vas a trabajar en Java o .NET, aprende su bytecode interpretado. Una vez que has llegado tan lejos, necesitas entender el idioma en el que estás trabajando y el compilador en el que estás trabajando. Mantente en ese camino y recogerás fragmentos de conocimiento, como con los operadores terciarios de VC++ y GCC (? :) como resultado la creación de valores temporales, mientras que una declaración if equivalente no lo hará.

Luego, después de unos 10 años, podrá escribir un código bastante bueno de baja latencia.

Lamentablemente, no hay una manera rápida de aprender esto.

Los buenos libros para aprender acerca de C++: efectiva C++ más eficaz C++ excepcional C++

+1

+1: "Luego, después de unos 10 años, podrás escribir un código bastante bueno de baja latencia". Tan verdadero. –

+0

Aprendí ensamblaje de ARM en la universidad (y muy brevemente MIPS) ¿recomendarías aprender Intel? – Tom

+1

Si está escribiendo código para computadoras Intel, entonces sí. Dicho esto, comprenda que, como desarrollador profesional, rara vez o nunca debe escribir el código ensamblador. Dicho esto, te hará un mejor ingeniero para poder entender bien el ensamblaje. – Beanz

7

[programador de C++]:

programación

ultra-baja latencia es difícil. Mucho más difícil de lo que la gente sospecha cuando comienza a caminar por el sendero. Hay algunas técnicas y "trucos" que puede emplear. Al igual que los puertos de terminación IO, la utilización de núcleos múltiples, las técnicas de sincronización altamente optimizadas, la memoria compartida. La lista es infinita. (edit) No es tan simple como "code-profile-refactor-repeat" porque puedes escribir código excelente que es robusto y rápido, pero nunca será realmente un código de latencia ultra bajo.

Lamentablemente, no hay un único recurso que conozca que le muestre cómo se hace. Los programadores especializados en (y bueno en) el código de latencia ultra baja se encuentran entre los mejores en el negocio y los más experimentados. Y con buenas razones. Porque si hay una solución milagrosa para convertirse en un buen programador de baja latencia, es simplemente esto: usted debe saber mucho sobre todo. Y ese conocimiento no es fácil de conseguir. Se necesitan años (¿décadas?) De experiencia y estudio constante.

Por lo que el propio estudio se refiere, aquí hay un par de libros que he encontrado útil o especialmente perspicaz por una razón u otra:

Cuestiones relacionadas