Паралелізм у ANDROID

&nbsp

Ми вже згадували про те, що правильно писати програми з паралельним виконанням завдань може бути дуже непросто У бібліотеках Android пропонуються зручні інструменти, що дозволяють зробити паралелізм і простіше, і безпечніше

Обговорюючи багатопотокові (конкурентні) програми, розробники часто говорять про те, що написання коду у вигляді декількох потоків нібито увазі, що ці потоки будуть виконуватися одночасно, а також про те, що багатопоточність в цілому прискорює виконання програми Зрозуміло, все не так просто Якщо в розпорядженні немає кількох процесорів, яким можна доручити виконання потоків, то програма, від якої потрібно виконувати множинні, незвязані, обмежені по швидкості обчислень завдання, буде вирішувати ці завдання з однаковою швидкістю, незалежно від того, реалізовані вони в різних потоках або в одному і тому ж потоці У системі з одним процесором багатопотокова версія програми може працювати навіть повільніше, ніж Однопотокові, через те, що додаткові ресурси будуть витрачатися на перемикання контексту

Багатопотокові програми Java зявилися задовго до того, як середній користувач зміг дозволити собі машини з декількома процесорами, на яких було б зручно працювати з такими додатками У світі Android многопоточность набуває великого значення, хоча протягом найближчого року або близько того на багатьох пристроях буде стояти по одному процесору Отже, в чому ж користь від багатопоточності, якщо не в прискоренні роботи програми

Якщо вам скільки-небудь довго доводилося займатися програмуванням, то, вважаємо, ви розумієте абсолютну важливість того, що всі команди вашого коду повинні виконуватися в жорсткому послідовному порядку Виконання будь-якої окремо взятої команди повинно так чи інакше відбуватися до виконання наступної команди Потоки – це просто явний спосіб помякшення цього правила Потоки – це абстракції, якими розробники користуються для того, щоб можна було створювати і писати код, який буде впорядкованим, логічним і легким для читання, навіть якщо втілені в ньому завдання в реальності не є впорядкованими

Паралельне виконання незалежних потоків не призводить до неминучого ускладнення програми, якщо потоки дійсно повністю незалежні (наприклад, якщо один з них працює на вашому компютері, а інший – На моєму) Але коли двом паралельним процесам доводиться виконувати одну і ту ж задачу, їм потрібно рандеву (точка для зустрічі та взаємодії) Наприклад, можлива ситуація, в якій дані з мережі буде потрібно відобразити на екрані або користувача введення буде потрібно записати в сховищі даних Організація рандеву (особливо при розгляді цієї проблеми в контексті оптимізаторів коду, процесорів з конвеєрною архітектурою і багаторівневої кеш-памяті) може бути досить складною Така складність стає до болю очевидною, коли програма якийсь час працювала на одному процесорі, на перший погляд, без проблем, але як тільки її перенесли в многопроцессорную середу – вона терпить крах в якихось дивних обставин, дуже ускладнюють налагодження

Процес рандеву, хто чинить дані або стан одного потоку видимими для іншого потоку, зазвичай називається публікацією посилання Коли один потік зберігає стан так, що це видно з іншого потоку, ми говоримо, що він публікує посилання на цей стан Як було зазначено, єдиний варіант надійної публікації посилання вимагає, щоб всі потоки, що посилаються на дані, синхронізувалися при використанні цих даних на одному обєкті Будь-які інші варіанти неправильні і ненадійні

Джерело: Android Програмування на Java для нового покоління мобільних пристроїв

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*