Что даёт Runtime мобильным программистам?
Каких только программ не написано для мобильных устройств, но как показывают исследования компании Qualcomm — разработчика и изготовителя процессоров для мобильных платформ, на рынке практически нет приложений, которые бы использовали эти платформы на сто процентов. Однако практические задачи настоятельно требуют этого: мощность мобильных процессоров нельзя наращивать бесконечно из-за растущего тепловыделения, да и аккумуляторы не бесконечные.
До последнего времени все кивали головой в сторону проектировщиков железа, а они пожимали плечами — в распоряжении мобильных программистов давно имеются многоядерные центральные и графические процессоры, по производительности не уступающие настольным аналогам. Есть системы управления потреблением энергии. Что же вы всё стараетесь уместить в один поток? Распараллеливайте код и наслаждайтесь производительностью!
Аппаратные компоненты процессора Qualcomm Snapdragon 800, допускающие распараллеливание:
Проблема в том, что так и не создано технологии распараллеливания для мобильных устройств, ставшей бы промышленным стандартом. Поэтому, как это ни удивительно для столь конкурентной сферы как мобильные вычисления, эта сфера почти пуста. Но наивно полагать, что никто этим не занимается. Ведь даже новичку понятно: «кто первый встал, того и тапки». Обладатель стандарта снимает не просто сливки с рынка, а самую пеночку!
Жизнь без Intel
Один из «тормозов» заключается в том, что в мобильном мире процессоры Intel — основа параллелизма в серверных системах, особенно не применяются. Здесь царит мир APR-технологий и графических подсистем. Поэтому предлагаемые подходы сконцентрированы вокруг распараллеливания либо времени выполнения средствами виртуальной машины, либо на этапе сборки и преобразования исходного кода средствами компилятора.
Но всё это кажется программистам не особенно удобным. По этой причине одним из трендов становится преобразования кода в автоматическом режиме. Второй современный тренд – компиляция программы перед ее выполнением. На этом основано большинство так называемых Runtime машин. Это ART — Android Runtime или Qualcomm MARE (Multicore Asynchronous Runtime Environment).
С графической подсистемой чуть попроще: здесь есть OpenGL ES (OpenGL for Embedded Systems) — подмножество графического интерфейса OpenGL, разработанное специально для встраиваемых систем.
Так что же может MARE?
Тесты показывают, что несколько строчек дополнительного кода увеличат производительность на 75%. Но бытующие в среде программиcтов мифы об убийственной сложности кода порой не дают внимательно прочитать мануалы. Вот классический пример параллельного процесса на примере вывода на экран «Hello Word» на Mare:
#include <stdio.h>
#include <mare/mare.h>
int main() {
mare::runtime::init(); //Initialize MARE
auto hello = mare::create_task([] {printf("Hello ”);}); // Create task
auto world = mare::create_task([] {printf(“World!”);}); // Create task
hello >> world; // Set dependency
mare::launch(hello); // Launch hello task
mare::launch(world); // Launch world task
mare::wait_for(world); // Wait to complete
runtime::shutdown(); // Shutdown MARE
return 0;
}
Не только разрабочики Uber или WhatsApp задают тон в области тех или иных приложений. Есть и иные, не менее доходные отрасли разработки для мобильных устройств, где еще только-только начинается «жизнь». Например параллельное программирование и разработка общих для всех стандартов! Не всё так уж запредельно сложно, при желании можно разобраться.
Тем, кто хочет разрабатывать под мобильные устройства, рекомендуем профессию «Разработчик мобильных приложений».