Che cos'è il "margine di prestazione del ninja?"
Un approccio ingenuo che finisca molte attività potrebbe essere quello di avviare un'attività, attendere che finisca e solo successivamente avviare l'attività successiva. Supponiamo di voler recuperare molte risorse di rete. L'approccio ingenuo sarebbe quello di inviare una richiesta per la prima risorsa, attendere che la richiesta venga completata, quindi inviare la successiva.
Se un buon programmatore è esperto in concorrenza, tale programmatore potrebbe scrivere un programma che esegue molte azioni in una sola volta usando tutte le risorse del computer su cui viene eseguito (processori, memoria di sistema, ecc.). Utilizzando l'esempio di risorsa di rete sopra, l'approccio ottimale sarebbe quello di tentare di ottenere molte risorse allo stesso tempo.
Il divario tra l'approccio ingenuo e l'approccio più ottimale è quello che questi autori (e apparentemente altri) chiamano il "gap delle prestazioni dei ninja".
Queste parole sono state scelte bene?
Probabilmente sono stati scelti per il valore promozionale e di novità. Poiché il fenomeno sembra essere un problema molto reale, avrei preferito un termine incentrato sul problema rispetto agli attori su un lato del gap.
Forse "gap di concorrenza ottimizzato" sarebbe stata una scelta migliore a parole.
Perché è così grande?
L'approccio ingenuo alla risoluzione di molti problemi con i computer può essere piuttosto inefficiente rispetto a miglioramenti noti.
La mia esperienza con Project Euler me lo ha dimostrato, con alcune soluzioni che non si completavano in un ragionevole lasso di tempo (minuti, ore), ma altre soluzioni allo stesso problema si sono rivelate incredibilmente veloci (in pochi secondi).
L'ordinamento a bolle è noto per essere piuttosto inefficiente rispetto ad altri algoritmi di ordinamento.
Mettiamo in dubbio la sua dimensione?
Sulla base delle conoscenze di cui sopra, non metto in dubbio le dimensioni come indicato.
Come può essere superato?
La soluzione ingenua sarebbe che il programmatore studiasse il threading e tutte le abilità rilevanti per colmare questa lacuna. Chiudere il gap in questo modo richiederebbe molto tempo e impegno, sia per acquisire le competenze che per scrivere i programmi.
Come impariamo a superarlo? Dovremmo imparare concurrency abile o imparare algoritmi?
L'abstract della carta afferma che l'utilizzo di algoritmi migliori combinati con migliori compilatori può ridurre il gap con il minimo sforzo richiesto. Sono propenso, senza conoscenza diretta, a crederli.