Egy program sebessége függ a processzortól, vagy csak a programnyelvtől?
Pl. az összeadás gyorsabb, ha új, modernebb processzorok végzik el?
Vagy az ilyen alapműveletek ugyanolyan gyorsak? Csak a programnyelvtől függ a sebesség?
Pont, hogy a processzortól függ jobban.
Persze, azért egyáltalán nem mindegy, hogy C-ben, vagy Pythonban írod a kódot, ami natív binárisra fordít, az nagyon gyors tud lenni, ami viszont értelmezett nyelv, az nagyon lassú.
De gondolj bele: mondjuk egy 100 MHz-es 486-os ugyanannyi idő alatt végezné el ugyanazt az összeadást, mint egy 4 GHz-es AMD FX?
Leginkább a processzortól, és a programnyelv jellegétől függ.
A processzor sebessége és architektúrája határozza meg, hogy milyen gyorsan tud egy-egy elemi műveletet végrehajtani. Értelemszerűen: minél több műveletet képes elvégezni egy időegység alatt, azokat annál gyorsabban hajtja végre.
A programnyelv jellegén pedig azt kell érteni, hogy fordítóval, értelmezővel, vagy valami egyéb technikával oldották-e meg. A gép (a proci) csak gépi kódban "ért". Abban programozni viszont finoman szólva is macerás. Ezért jelentek meg a különböző programozási nyelvek. Viszont ezeket a proci nem érti, ezért át kell alakítani őket gépi kódú utasításokra. Ez több módon történhet:
- Fordító. A fordítóprogram végigmegy a teljes programkódon, és azt egy az egyben átalakítja gépi kóddá, amit már a proci közvetlenül is meg tud emészteni.
- Értelmező. Ilyenkor az értelmező soronként értelmezi a kódot, és adja be a procinak. Ha egy sorra 10 ezerszer kerül rá a vezérlés, min a 10 ezerszer értelmezi, és beadja a procinak.
- Egyéb. Nem akarok most kisregényt írni, minden olyan "köztes" megoldás ide tartozik, ami a fentebbi kategóriákba nem illik bele. Pl. futásidőben fordítás (pl. Perl), köztes bináris kód (Java, és ha úgy vesszük, a .Net is).
Az értelmezett nyelvek mindig potenciálisan lassabbak, mint azok, amiknél fordítókat használnak. De pl. a különböző fordítóval megvalósított nyelvek között alig van különbség. Egy összeadás Pascalban, C++-ban, és Go-ban is hasonló ideig fog tartani.
Alapvetően igaz, hogy a modernebb proci gyorsabb, de ez feltételekrtől is függ.
Az integer összeadás biztos, hogy nem lesz gyorsabb egy modernebb procin, ha a régebbi procival azonos órajelen fut, vagy annál alacsonyabban.
A programnyelv nem túl meghatározó, inkább a nyelv fordítójának képességei döntőek. Már ha van egyáltalán fordító.
Programnyelv esetén az interpretált nyelvek (python) nagyon lassúak, a VM-esek (Java) már nem annyira, és a natív, gépi kódra fordítók (c, asm) a leggyorsabbak.
Ami még belejátszik a sebességbe, az az, hogy mi a feladat. Egy 486-os még erősen izzadt az .mp3 zenei fájlok lejátszásánál, de ugyanezt a feladatot játszva, erőlködés nélkül abszolválta egy öngyújtó méretű mp3-lejátszóban lévő ASIC, azaz célprocesszor.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!