Il blog di uforob
Miscellanea: anime, manga, curiosità, videogiochi, informatica, scienza, tecnologia, notizie, tempo libero, TV...
AREA PERSONALE
TAG
MENU
« Scienza, tecnologia e magia | A cosa serve Mac OS X » |
Non voglio parlare di quelli che per scelta più o meno consapevole non lavorano e del loro costo sulla società, quelli che in giapponese si chiamano hikikomori. Questo articolo indica quante risorse servono con diversi linguaggi per fare un programma che non faccia niente. In realtà il programma testato non fa veramente niente, è un ciclo vuoto infinito. La cosa è leggermente diversa perché con un ciclo vuoto il programma deve ESEGUIRE continuamente un'istruzione di salto, un programma che non facesse niente sarebbe terminato subito e mi sarebbe stato difficile valutare l'occupazione di memoria e CPU.
Java
public class Loop {
/**
* @param args
*/
public static void main(String[] args) {
while(true);
}
}
Il file jar eseguibile esportato con Eclipse (che quindi include altre classi da JDT) è grande 7986 byte (8KB) e all'avvio occupa tra il 96 e il 100% di CPU e 6,3 MiB di RAM
Python
while True:
pass
Lo script è un file di testo che occupa solo 18 byte. L'esecuzione occupa tra il 94 e il 100% di CPU e 1,7 MiB di RAM.
C
int main()
{
while(1);
return 0;
}
File di 7280 byte. Occupa tra il 98 e il 100% di CPU e 60 KiB di RAM.
C++
Il sorgente è lo stesso di prima compilato con g++ invece di gcc (avrei potuto togliere il return e usare il tipo bool di C++ ma così il confronto è più equo anche se il return è comunque aggiunto dal compilatore, non so invece quanto la compilazione dei bool sia sovrapponibile al metodo spartano del C per cui 0 è falso e tutti gli altri valori sono vero). File di 7282 byte. Il consumo di memoria e di CPU ha oscillato di più (intorno al 98 o 100 % di CPU e ha toccato anche 90, la RAM dopo un po' è scesa da 60 a 56 KiB).
Bash
while true
do
:
done
Tra 96 e 98% e 156 KiB di RAM.
Windows Batch
:s
goto s
File di 10 byte. Tra 1 e 5% di CPU e 1460 KB di RAM
Questo ha la particolarità che in effetti stampa anche l'istruzione "goto s" sulla linea di comando e quindi è molto meno vicino al "non fare niente".
Conclusione
I risultati sono un po' falsati perché per Java, Python, Bash e Windows Batch (insomma tutti tranne C e C++ che sono compilati) risulta sul processo la dimensione di tutto l'ambiente comunque direi che il vincitore è Python che bilancia l'occupazione dei sorgenti e delle risorse runtime. Anche C/C++ però bisogna considerare che i sorgenti devono esser compilati invece il file Python da 18 byte è bell'e che pronto a essere dato in pasto all'interprete senza dover fare prima alcun'altra operazione. Windows Batch è simile, anzi usa meno RAM e il file è più piccolo però è fuori gara perché effettua le stampe (l'effetto è diverso da una finestra con una scritta ferma e un cursore lampeggiante).
Dettagli
Per chi se lo stesse chiedendo tutto questo è nato perché a lavoro dovevo testare uno script che facesse ripartire un programma Java terminato e ho fatto il loop descritto come prova.
Il computer utilizzato ha un processore Intel® Core™2 Duo E6750 (2.66GHz) e 2GB di RAM.
Tutte le prove sono state effettuate con Ubuntu 12.04.4 LTS "precise pangolin" a 32 bit, tranne il Windows batch che è stato provato su Windows XP Professional Service Pack 3 (32 bit) con lo stesso computer
CERCA IN QUESTO BLOG
ULTIMI COMMENTI
Inviato da: cassetta2
il 19/07/2024 alle 23:03
Inviato da: Corpo_Di_Rosa
il 23/10/2022 alle 17:39
Inviato da: Elvio Catania
il 13/04/2020 alle 08:58
Inviato da: cassetta2
il 25/04/2019 alle 16:19
Inviato da: ufo.rob
il 05/04/2016 alle 21:36