Сүүлийн хэд хоног сурсан зүйлээ хуваалцъя.
Хэлтсээ солисон гэж хэлсэн билүү, үгүй билүү. Front-end engineer болсон. Өмнө нь front-end байсан л даа, хэсэг back-end байж байгаад эргээд front-end болж байгаа санаатай.
Шинэ хэлтэс native тоглоом хийдэг хэлтэс болохоор, OpenGL, болон C++ хэрэглэдэг юм. Аль алинийг нь хийж байсан, тэгэхдээ олон жилийн өмнө. Тэгээд сая хэд хоног сэргээнгээ шинэ зүйл сурч авлаа.
Эхлээд энгийн зүйлээс эхлье. Тоглоомонд, FPS(frames per second) гэж үг бий. Жишээ нь 60fps. Энэ нь секундад 60 удаа зурна гэсэн үг. Өөрөөр хэлбэл 16 миллисекундад чиний бүх тооцоо, бодолт нтр чинь дуусаад зурах зүйлүүд чинь бэлэн байх ёстой гэсэн үг юм. Тэгэхээр performance тал дээр сайн ажиллах ёстой. Ямар нэгэн data-руу хандалт хийх үед loop ерөөсөө хэрэглэж болохгүй, дандаа O(1)-ээр хандах ёстой. Үүний тулд, vector, hash, set гэх мэт өгөгдлийн бүтцүүдийг ашиглана. STL дээр бүгд бэлэн байгаа.
Тэгээд дээрээс нь, сүүлийн үеийн PC-үүд дандаа multi-core болсон. Тоглоомны OpenGL боловсруулах хэсэг(тоглоом гэлтгүй, app-ын core animation хэсэг), ерөнхийдөө main thread дээр боловсруулалт хийгддэг юм. Бүх default event-үүд, update method-ууд main thread дээр дуудагдана. Тэгэхээр тэр дотор шууд бодолт эсвэл data боловсруулалт хийвэл, main thread чинь улам л хоцрох буюу нөгөө 16 миллисекундээс чинь хорогдоод явна л гэсэн үг. Тэгэхээр multi-core оо ашиглаад өөр thread дээр боловсруулалт хийвэл, толгоомын дотоод боловсруулалт чинь, OpenGL тэйгээ зэрэгцэж ажиллана, мөн тооцоо дуусч амжаагүй байсан ч, frame-ээ зураад байх боломж үүсч байгаа юм.
Зүгээр шууд thread ашигласан ч болно, эсвэл GCD(Grand Central Dispatch <– my fav one) гэх мэт library ашигласан ч болно.
Тэгэхдээ thread үүсгэх нь бодсон шиг бас амар эд биш. Memory management-ээ сайн хийх хэрэгтэй. 2 зэрэг ажиллаж байгаа thread 2-уулаа нэг object руу зэрэг хандах үед янз бүрийн асуудал үүснэ.
Жишээ нь, Cocos2d-x гээд engine-ий хувьд, auto releasing pool memory management-тэй. Тэр нь main thread дээр ажиллана. Тэгэхээр жишээ нь, нэг auto-releasing object үүсгээд main thread биш тусдаа thread дээр ашиглаад явж байлаа гэж бодъё. Ашиглаж байх хугацаанд чинь, main thread дээр ажиллаж байгаа main loop нэг бүтэн тойроод, auto releasing object-уудаа memory-оос устгалаа гэж бодъё. Тэгвэл нөгөө thread дээр чинь memory access алдаа үүсээд, тоглоом чинь шууд зогсоно.
Уг нь GCD, Objective-C ын дээд level-ийн framework-ууд гоё ажилладаг юм. Өөрөө автоматаар retain нтр хийгээд. Харин C++ дээр тийм юм байхгүй болохоор, тиймэрхүү зүйлсийг бүгдийг өөрөө хийнэ.
Хэлэх гээд байгаа зүйлс ердөө л 3
1. Thread сайн ашигла
2. Auto-releasing object ийг thread руу дамжуулахад retain хий, хэрэглэж дуусаад release хий
3. OpenGL тэй холбоотой process-ууд main thread дээр
Иймэрхүү жижиг зүйлсээ мэдэхгүйгээс болоод, хэд хоног нойргүй, ямар алдаа гараад байгаагийн учрыг олохгүй эргүүтсэн бодит жишээ байгаа тул, та бүгдийг бас битгий тэгж цагаа үрээсэй гэж бодсондоо бичлээ.
Uneheer heregtei medeelel bna. Bayarlalaa ho.
C++ bolon Python anhan shatnaas n surah sonirholtoi baigaa yum. Zuvluguu ugj boloh uu? Uuruur bol shine suraltsagch bgaa yum
Хэрэгтэй мэдээлэл өгсөнд баярлалаа 🙂