Avatar
Samuel Illo
Redaktor
Avatar
Samuel Illo :19.7.2014 21:24

Odpoveď na túto otázku som hľadal dosť dlho ale akosi som sa nič nedozvedel. Všade píšu inak. Predovšetkým mi ide o HW nároky a tiež rýchlosť na mobilných zariadeniach. Napr. iOS má aplikácie primárne založené na C-čku a sú oproti Androidu plynulejšie - ten beží primárne v Jave. Na Android sa ale pomocou NDK dá ale tiež robiť v CPP. Bežalo by to rýchlejšie ako v Jave?

Možno dosť blbá otázka ale pýtam sa, no :)

Odpovědět 19.7.2014 21:24
www.samuelillo.com | www.github.com/lamka02sk
Avatar
coells
Redaktor
Avatar
Odpovídá na Samuel Illo
coells:19.7.2014 22:18

Protože není jasné, jestli se ptáš na rychlost android vs iOS nebo C vs Java, zkusím odpovědět trochu obšírněji.

Především není snadné srovnávat rychlost jazyků. Java je z principu pomalejší kvůli práci s pamětí a garbage collectoru. Na druhou stranu je C++ náročnější na programátorské dovednosti. Takže lze napsat program v C++, který poběží daleko rychleji, ale je nutné být šetrný k paměti a opatrný s architekturou procesoru. Čím je aplikace složitější, tím menší je pravděpodobnost, že se to povede.

Důležitým faktem je, že rychlost Javy je dostačující v naprosté většině případů. Většinou se tedy o rychlost vůbec nemusíš starat. Některé vysoce specializované aplikace implementované v Javě jsou rychlejší než nativní kód, čistě z toho důvodu, že složitost kódu v Javě byla řádově nižší, takže zůstalo více prostoru pro optimalizace.

Dalším faktorem je kvalita JVM, které bývají na mobilním HW ořezané a nekvalitní. Efektivita se tedy bude lišit v rámci prostředí a procesorů. Na mobilu by tedy nativní aplikace měly s přehledem vyhrát. Časem se to ale bude měnit a zlepšovat s příchodem 64-bitových procesorů.

Další srovnání je mezi androidem a iOS. Tady iOS s přehledem vede, protože je kompletně hardwarově akcelerované a CPU většinu času nic nedělá. Android musí běžet i na slabším hardwaru, takže akceleraci nemá a celý systém tím trpí.

Aplikace na iOS navíc nejsou založené na C, ale na Objective-C. Poslední verze kompilátoru clang je nesmírně rychlá a s pamětí pracuje velice dobře. Tady Android prohraje na celé čáře. Na podzim navíc Apple plánuje nový jazyk Swift, který už návrhem podporuje ještě rychlejší kód, než má clang. Pokud k tomu přidám skvělý hardware (mám zařízení s procesory A6 i A7 a GPU na A7 mi běží 4x rychleji v kritických situacích), tak má iOS výhodu jak v nativním kódu, kompilátoru, který se specializuje pouze na 2 fyzická zařízení a hodně rychlý hardware. Tahle kombinace způsobuje, že je iOS daleko rychlejší, než Android zařízení.

 
Nahoru Odpovědět 19.7.2014 22:18
Avatar
Samuel Illo
Redaktor
Avatar
Odpovídá na coells
Samuel Illo :19.7.2014 22:26

Zaujíma ma predovšetkým rýchlosť na mobilných zariadeniach. Tam je dôležitá každá "kvapka" výkonu, zvlášť na Androide, kde je problém s obrovským počtom HW. Ak by teda bolo C++ rýchlejšie na Androide ako Java...
Niekde som čítal, že dobrou optimalizáciou správy pamäte sa dajú zmenšiť nároky na pamäť až o 50%. Je to pravda?

Nahoru Odpovědět 19.7.2014 22:26
www.samuelillo.com | www.github.com/lamka02sk
Avatar
coells
Redaktor
Avatar
Odpovídá na Samuel Illo
coells:19.7.2014 22:41

Pokud mluvíme o hře, tak C++ bude rychlejší. Pokud se ale na rychlost musíš ptát, nedokážeš takový program napsat. K tomu je nutné rozumět architektuře ARM procesorů a specifikám jazyka. V případě standardního UI nic nezískáš, protože bude pomalý systém pod tvojí aplikací.

Optimalizace paměti vede ke snížení rychlosti, stejně jako zvýšení rychlosti vyžaduje vyšší paměťové nároky. To je typický optimalizační trade-off.

Optimalizace navíc snižuje čitelnost programu. Například v C záleží na pořadí proměnných. Proměnné se obvykle shlukují do logických celků a zapisují v pořadí, které umožňuje zvýšit čitelnost programu. Jejich pořadí je ale důležité pro rychlost programu a velikost paměti, kterou budou zabírat (memory alignment). Navíc existují techniky, kterými lze zvýšit efektivnost obou (tzv. tagged pointers), ale pokud vím, podporuje to pouze Apple.

 
Nahoru Odpovědět 19.7.2014 22:41
Avatar
Samuel Illo
Redaktor
Avatar
Odpovídá na coells
Samuel Illo :19.7.2014 22:48

Ďakujem za vysvetlenie ;)

Pravdou je, že ja viem len základy C++, čo som sa dávnejšie učil. Keby som mal čosi robiť, bola by to len nejaká aplikácia zobrazujúca obsah, založená na princípe browseru a na to by teda asi podla toho čo hovoris bola lepsia Java

Nahoru Odpovědět 19.7.2014 22:48
www.samuelillo.com | www.github.com/lamka02sk
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.