2011-01-26 8 views
6

Qualcuno potrebbe darmi qualche suggerimento sul modo migliore in cui imparare come eseguire una programmazione a bassa latenza? Ho molti libri di programmazione ma non ne ho mai visto uno focalizzato (o aiutato) sulla scrittura di codice estremamente veloce. O i libri non sono la migliore strada da seguire?Il modo migliore per imparare a scrivere codice C++/Java/C# veloce e critico per la latenza?

Alcuni consigli di un esperto sarebbero molto apprezzati!

EDIT: Penso che mi riferisco di più al limite CPU/memoria.

+4

Dipende da cosa è quel codice? Il codice IO è vincolato, o la cpu è vincolata? Non ha senso avere assemblaggi fatti a mano se si sta aspettando su un database e non ha senso avere un filesystem standard di google se tutto ciò che si vuole fare è scrivere un file di testo. –

+3

La risposta per una sola lingua prenderebbe libri e ci si aspetta di ottenere risposte per C++/Java/C#: questo richiederà biblioteche. Quindi immagino che dovrai concertare la tua domanda se ti aspetti delle risposte. –

+4

Passaggio 1: programma di scrittura. Passaggio 2: misurare le prestazioni. Passo 3: Se la prestazione è spazzatura, ottimizzare in punti caldi. Passaggio 4. Passo Goto 2. –

risposta

4

Il mio consiglio sarebbe quello di imparare come funziona C++/Java/C# e avere un'idea generale di come si traduce in istruzioni a livello macchina. Alcune operazioni sono più costose che altre. Un piccolo frammento di codice in un linguaggio di alto livello si traduce in una serie di istruzioni della macchina (spesso più di quanto si pensi).

Inoltre, assicurarsi di apprendere le varie strutture dati, a cosa servono e il loro caratteristiche di prestazione per varie dimensioni del problema. Scegliere la struttura dati corretta per il problema può fare miracoli sulla velocità di esecuzione.

1

Iniziare dall'assemblaggio di apprendimento. Quindi se hai intenzione di lavorare in Java o .NET impara il loro codice bytecode interpretato. Una volta che sei arrivato così lontano devi capire la lingua in cui lavori e il compilatore su cui stai lavorando. Continuate su quel percorso e raccoglierete bit di conoscenza come con entrambi gli operatori ternari VC++ e GCC (? :) determinano la creazione di valori temporanei mentre un'istruzione equivalente if non lo farà.

Quindi dopo circa 10 anni sarete in grado di scrivere codice a bassa latenza piuttosto buono.

Sfortunatamente non esiste un modo rapido per imparare questo.

buoni libri per conoscere C++: Effective C++ più efficace C++ Exceptional C++

+1

+1: "Quindi dopo circa 10 anni sarai in grado di scrivere codice a bassa latenza piuttosto buono." Così vero. –

+0

Ho imparato l'assemblaggio ARM all'università (e molto brevemente MIPS), consiglieresti di imparare l'Intel? – Tom

+1

Se si sta scrivendo il codice per i PC Intel, allora si. Detto questo, comprendi che come sviluppatore professionista dovresti scrivere raramente, se mai, codice assembly. Detto questo ti farà diventare un ingegnere migliore per capire bene il montaggio. – Beanz

7

[C++ programmatore]:

programmazione

ultra-bassa latenza è difficile. Molto più difficile di quanto le persone sospettano quando iniziano per la prima volta il percorso. Ci sono alcune tecniche e "trucchi" che puoi utilizzare. Come porte di I/O di completamento, utilizzo multi-core, tecniche di sincronizzazione altamente ottimizzate, memoria condivisa. L'elenco potrebbe continuare all'infinito. (modifica) Non è semplice come "code-profile-refactor-repeat" perché puoi scrivere codice eccellente che è robusto e veloce, ma non sarà mai veramente un codice di latenza ultra-basso.

Sfortunatamente non esiste una singola risorsa che conosca che indichi come è stata eseguita. I programmatori specializzati in (e bravi a) codici a bassa latenza sono tra i migliori del settore e i più esperti. E a ragione. Perché se c'è una soluzione di proiettile d'argento per diventare un buon programmatore a bassa latenza, è semplicemente questo: devi sapere molto di tutto su . E questa conoscenza non è facile da trovare. Ci vogliono anni (decenni?) Di esperienza e studio costante.

Per quanto riguarda lo studio stesso è interessato, ecco un paio di libri che ho trovato utile o particolarmente penetranti per un motivo o un altro:

Problemi correlati