2011-10-27 6 views
6

So che questi termini vengono utilizzati nel contesto del raggiungimento delle prestazioni. In questi giorni ci sto lavorando e ho cercato di conoscerli da internet ma non ho avuto alcun esempio che mostri chiaramente questi concetti con l'esistenza di questi problemi/concetti negli scenari di sviluppo del mondo reale. Qualcuno può spiegare esaurientemente questi termini, gli scenari di esempio e dove questi concetti e termini sono probabilmente usati.Che cos'è il codice Boilerplate, Hot code e Hot spot?

Grazie.

+1

Una domanda per i programmatori pila? – Wivani

risposta

14

"Boilerplate" non ha nulla a che fare con le prestazioni: significa solo codice standard necessario per definire un'applicazione o lavorare con qualche framework. È il codice che probabilmente sarà identico in ogni applicazione.

Un "punto caldo", d'altra parte, indica una parte del codice che viene eseguita molte volte e pertanto le sue prestazioni sono importanti per le prestazioni complessive dell'applicazione. Di solito un hot spot è identificato dall'effettiva profilazione: non è un punto caldo se viene eseguito molte volte ma è così banale che il suo impatto sulle prestazioni è minimo.

4

Boilerplate code

"codice a caldo" è scalabile codice ben scritto

"punti caldi" sono un settore di attività intensa. Sono punti caldi perché sono spesso eseguiti codice.

2

Una definizione di "hot spot" è una regione di codice in cui il contatore del programma trascorre una buona parte del suo tempo. Un termine correlato è un "collo di bottiglia" che, mal definito, generalmente si riferisce a un codice localizzato su una funzione, una routine o un metodo, che causa una frazione di tempo più lunga del necessario.

Entrambi questi termini sono molto fuorvianti, perché c'è un'enorme ipotesi non scritta. L'assunto è che non ci sono opportunità di accelerare un programma che non sia un hotspot o un collo di bottiglia. Le opportunità di aumento della velocità possono essere più diffuse, e se non vengono trovate e riparate, diventano il limitatore delle prestazioni.

Lasciatemi fare un esempio. Recentemente, quando ho lavorato su un programma C++ di circa 300 linee, ho preso dieci stackshots, perché volevo vedere come potevo accelerarlo. Quattro di questi stackshots si presentava così:

CTypedPtrArray<CPtrArray,COperation *>::operator[]() line 1555 + 23 bytes 
TcProcess() line 246 + 14 bytes ---> COperation* pOp = oplist[i]; 
CMhAck::Handler() line 165 
doit() line 297 + 12 bytes 
main() line 318 

CTypedPtrArray<CPtrArray,CJob *>::operator[]() line 1555 + 23 bytes 
SchProcess() line 212 + 14 bytes ---> pJob = joblist[i]; 
COpAck::Handler() line 145 
doit() line 297 + 12 bytes 
main() line 318 

CTypedPtrArray<CPtrArray,CTask *>::operator[]() line 1555 + 23 bytes 
TcProcess() line 249 + 18 bytes ---> pTask = pOp->tasks[pOp->iCurTask]; 
CMhAck::Handler() line 165 
doit() line 297 + 12 bytes 
main() line 318 

CTypedPtrArray<CPtrArray,CTask *>::operator[]() line 1555 + 23 bytes 
COperation::~COperation() line 57 + 15 bytes ---> CTask* p = tasks[i]; 
COperation::`scalar deleting destructor'() + 37 bytes 
TcProcess() line 259 + 28 bytes 
CTskAck::Handler() line 193 
doit() line 297 + 12 bytes 
main() line 318 

Il programma ha preso 20 secondi complessiva. Ciò che questi campioni di stack mi dicono è circa il 40% di quel tempo, o 8 secondi, viene speso nell'operatore di indicizzazione sulla classe dell'array. Questo mi dice che potrei ridurre il tempo di esecuzione da 20 secondi a 12 secondi, dare o prendere, se potessi fare l'indicizzazione più direttamente, non attraverso una chiamata di funzione. L'accelerazione sarebbe 20/12 = 1.67, o circa un aumento del 67%. (Avviso: Non me ne frega un bel niente "esatta" quando si tratta di tempi Quello che volevo fare era trovare il problema..)

Ora si potrebbe facilmente essere in disaccordo con tale metodo di risolvere il problema , ma puoi vedere come ho rilevato quale problema era, giusto?

OK, quindi dov'è "l'hotspot" e dov'è il "collo di bottiglia"? Chiaramente c'è un hotspot nella funzione di indicizzazione dell'operatore, ma è dove si trova il problema? (In realtà non è nemmeno così, perché sono tre diverse funzioni.) Significa che dovrei provare a rendere più veloce quella routine? Non ne sono nemmeno proprietario!

C'è un collo di bottiglia sotto forma di una "routine lenta"? No! Non c'è una routine particolare che sia lenta o un "cattivo algoritmo".

Quello che ho fatto è stato fare un descrizione di ciò che stava facendo ("E 'indicizzazione in alcune routine.") Dove questa descrizione si applica una grande frazione del tempo.

Il termine migliore che riesco a trovare per queste cose è il "time drain", perché sta trascorrendo una grande quantità di tempo a fare cose che non lo fanno in realtà.

More about terminology and popular misconceptions.