Miért van az, hogy az online Életjátékok gyorsak, amiket pedig én írok, azok lassúak?
Itt van például ez:
A legjobb felbontás majdnem pixeles, és így hatalmas a tábla, mégis maximális sebességgel hasít. Az enyémen például 200*200-as táblán már majdnem egy másodpercig tart egy kör, így döcög. Mi lehet a titok?
"Miért van az, hogy az online Életjátékok gyorsak, amiket pedig én írok, azok lassúak?"
Kezdetként mondjuk közzétehetnéd a Te változatodat, hogy lássuk hol van a gond, hol lehet optimalizálni még a kódon.
Meglehetősen klasszikus a megközelítésem. Egy mátrix tartalmazza a mező állapotát, aztán egy másik mátrixba kiszámolódik az új generáció, és az első mátrix lecserélődik a másodikra. A legújabb verzióhoz PyOpenGL-t használtam.
https://pastebin(pont)com/cvUvDBJG
:) Ugyanez volt az én első önálló programozói problémám évtizedekkel ezelőtt. Akkor az volt a válasz, hogy én egy BASIC interpreteren futtattam az én verziómat, egy srác viszont szerzett valahonnan egy leírást a processzorról – internet még nem volt –, és csinált egy gépi kódú változatot. A különbség ámulatba ejtő volt.
Vannak trükkök, amikkel egy ilyen feladat megoldása meggyorsítható, de a lényegi különbség valószínűleg még mindig ugyanaz. A Python nyelvű programot interpreter hajtja végre, míg más gépeken valószínűleg gépi kódra fordított program fut. Ha te olyan nyelvre írod át a programodat, amely legalább egy Java vagy .NET környezetre támaszkodik, már sokkal gyorsabb lesz a végeredmény. Még jobb egy natív kódba fordító compiler, C++, Visual Basic, Free Basic, Pascal stb.
A problémám az az egésszel, hogy 1982-ben egy olyan gépen, amelynek a RAM-ja összesen 16 kilobyte volt, a processzor órajele kb. 1 megahertz, a Basic interpreter a 40x25-ös táblát szintén kb. másodpercenként tudta frissíteni. A 200x200-as terület ezek szerint kb. 8 megahertzes gépen menne ugyanilyen gyorsan, mondjuk így. A te géped viszont valószínűleg 3000 megahertzes körüli lehet. Igaz, hogy a mostani operációs rendszerek hatékonysága kis töredéke a régiekének, de ezzel együtt is valószínű, hogy a programod még sokat optimalizálható.
Lehet, hogy rossz adatszerkezetet használsz, mondjuk array helyett typedarray-t kellene használnod, vagy tömb helyett láncolt listát, esetleg valamilyen stack-et. Ha OpenGL, akkor lehet, hogy nem használsz VBO-t, vagy egyéb hasonló megoldásokat ott, ahol kellene.
Vagy rossz az algoritmusod.
Ha programozni akar az ember, alaposan meg kell ismernie az algoritmusokat, az adatszerkezeteket, és nem árt a programtervezési minták ismerete is. Ezek után lehet komolyabban agyalni, hogy mit mivel hogyan mikér és miért.
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!