1
Ohjelmointi, palvelimet ja muu edistyneempi käyttö / Vs: Syötteen lukeminen c:llä yhtenäiseen merkkijonoon
« : 14.09.12 - klo:12.20 »Tein syötteen lukemisesta testiä:
juha@ape ~/mycode/c $ wc i20.txt
522560 2619560 18647740 i20.txt
juha@ape ~/mycode/c $ i=0; time while [ $i -lt 15 ]; do cat i20.txt | ./test_stdinread 1 >/dev/null; i=`expr $i + 1`; done
real 0m4.520s
user 0m4.172s
sys 0m0.344s
juha@ape ~/mycode/c $ i=0; time while [ $i -lt 15 ]; do cat i20.txt | ./test_stdinread 2 >/dev/null; i=`expr $i + 1`; done
real 0m4.459s
user 0m4.128s
sys 0m0.344s
juha@ape ~/mycode/c $ i=0; time while [ $i -lt 15 ]; do cat i20.txt | ./test_stdinread 3 >/dev/null; i=`expr $i + 1`; done
real 0m4.429s
user 0m4.016s
sys 0m0.464s
juha@ape ~/mycode/c $ i=0; time while [ $i -lt 15 ]; do cat i20.txt | ./test_stdinread 4 >/dev/null; i=`expr $i + 1`; done
real 0m4.467s
user 0m4.108s
sys 0m0.364s
1) ./test_stdinread 1 Linkitetty lista, jossa lukemiseen erillistä bufferia
2) ./test_stdinread 2 Syötteen luku suoraan listasolmuihin
3) ./test_stdinread 3 Syötteen luku suoraan listasolmuihin, joita tuplataan kooltaan
4) ./test_stdinread 4 Syötteen luku yhtenäiseen muistilohkoon
Tapaus 3 on suuren syötteen tapauksessa nopein ja kaikki linkitetyn listan versiot voittavat yhtenäiseen muistilohkoon lukevan version. Kaikissa tapauksissa syötettä prosessoidaan tulostamisen verran. Jos prosesointia olisi enemmän, niin yhtenäinen muistilohko alkaisi erottua edukseen myös suuremmilla syötteillä.