Асинхронне програмування
Асинхронність — це процес обробки введення/виводу, що дозволяє продовжити обробку інших завдань, не чекаючи завершення попереднього завдання.

Комп'ютерні програми часто мають справу з тривалими процесами. Наприклад, отримання даних з бази даних або виконання складних обчислень. Поки виконується одна операція, можна було б завершити ще кілька. А бездіяльність призводить до зниження продуктивності. Асинхронне програмування збільшує ефективність, тому що не дозволяє блокувати основний потік виконання.

Асинхронне програмування 
У синхронному коді кожна операція чекає закінчення попередньої. Тому вся програма може «зависнути», якщо одна з команд виконується дуже довго.

Асинхронний код прибирає операцію, яка блокує основний потік програми, так що основний потік не блокується, і програма може виконувати інші операції.

Асинхронне програмування успішно вирішує безліч завдань. Одна з найважливіших — користувач може взаємодіяти з програмою, поки виконується інше завдання.

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

В цьому випадку головний потік виконання поділяється на дві гілки. Одна з них продовжує займатися інтерфейсом, а інша виконує запит.

Коли мова заходить про асинхронність, слід розглянути також такі поняття: конкурентність, паралелізм і багатопоточність. Всі вони пов'язані з одночасним виконанням завдань, проте це не одне і те ж.

Конкурентність 
Поняття конкурентного виконання найзагальніше. Воно буквально означає, що безліч завдань вирішуються в один час. Можна сказати, що в програмі є кілька логічних потоків ‒ по одному на кожну задачу.

Потоки можна опрацьовувати одночасно фізично, проте це не обов'язково.

Завдання при цьому не пов'язані одне з одним. Отже, не має значення, яке завдання завершиться раніше, а яке пізніше.

Паралелізм 
Паралельне виконання зазвичай використовується для поділу одного завдання на частини, щоб пришвидшити обчислення.

Наприклад, потрібно зробити кольорове зображення чорно-білим. Обробка верхньої половини не відрізняється від обробки нижньої. Отже, можна розділити цю задачу на дві частини і роздати їх різним потокам, щоб пришвидшити виконання в два рази.

Наявність двох фізичних потоків тут принципово важливо, так як на комп'ютері з одним процесорним ядром такий прийом провести неможливо.

Багатопоточність 
Тут потік є абстракцією, під якою може ховатися і окреме ядро процесора, і віртуальне ядро. Деякі мови навіть мають власні об'єкти потоків. Таким чином, ця концепція може мати різну реалізацію.

Шаблони асинхронності 
Можна виділити три найпопулярніші схеми асинхронних запитів.

Послідовне виконання 
Використовується для пов'язаних завдань, які потрібно запускати один за одним. Наприклад, перший запит отримує назви фільмів, а другий ‒ інформацію про них.

Паралельне виконання 
Застосовується для вирішення незалежних завдань, коли важливо, щоб виконалися всі запити. Наприклад, дані вебсторінки вантажаться з трьох серверів, а після цього починається рендеринг.

Конкурентне виконання 
Використовується для вирішення незалежних завдань, коли важливо, щоб виконався хоча б один запит. Наприклад, відправка ідентичних запитів на різні сервера.

Програмування
Асинхронність — це процес обробки введення / виводу , що дозволяє продовжити обробку інших завдань , не чекаючи завершення попереднього завдання . Комп'ютерні програми часто мають справу з тривалими процесами . Наприклад , отримання даних з бази даних або виконання складних обчислень . Поки виконується одна операція , можна було б завершити ще кілька . А бездіяльність призводить до зниження продуктивності . Асинхронне програмування збільшує ефективність , тому що не дозволяє блокувати основний потік виконання . Асинхронне програмування У синхронному коді кожна операція чекає закінчення попередньої . Тому вся програма може « зависнути » , якщо одна з команд виконується дуже довго . Асинхронний код прибирає операцію , яка блокує основний потік програми , так що основний потік не блокується , і програма може виконувати інші операції . Асинхронне програмування успішно вирішує безліч завдань . Одна з найважливіших — користувач може взаємодіяти з програмою , поки виконується інше завдання . Візьмемо для прикладу додаток , який підбирає серіали за зазначеними критеріями . Після того , як користувач обрав параметри , по яким буде відбуватися пошук , програма відправляє запит на сервер . А там здійснюється пошук вказаних фільмів . Обробка може тривати доволі тривалий час . Якщо додаток працює синхронно , то користувач не зможе взаємодіяти зі сторінкою , поки не прийде результат . В цьому випадку головний потік виконання поділяється на дві гілки . Одна з них продовжує займатися інтерфейсом , а інша виконує запит . Коли мова заходить про асинхронність , слід розглянути також такі поняття : конкурентність , паралелізм і багатопоточність . Всі вони пов'язані з одночасним виконанням завдань , проте це не одне і те ж . Конкурентність Поняття конкурентного виконання найзагальніше . Воно буквально означає , що безліч завдань вирішуються в один час . Можна сказати , що в програмі є кілька логічних потоків ‒ по одному на кожну задачу . Потоки можна опрацьовувати одночасно фізично , проте це не обов'язково . Завдання при цьому не пов'язані одне з одним . Отже , не має значення , яке завдання завершиться раніше , а яке пізніше . Паралелізм Паралельне виконання зазвичай використовується для поділу одного завдання на частини , щоб пришвидшити обчислення . Наприклад , потрібно зробити кольорове зображення чорно - білим . Обробка верхньої половини не відрізняється від обробки нижньої . Отже , можна розділити цю задачу на дві частини і роздати їх різним потокам , щоб пришвидшити виконання в два рази . Наявність двох фізичних потоків тут принципово важливо , так як на комп'ютері з одним процесорним ядром такий прийом провести неможливо . Багатопоточність Тут потік є абстракцією , під якою може ховатися і окреме ядро процесора , і віртуальне ядро . Деякі мови навіть мають власні об'єкти потоків . Таким чином , ця концепція може мати різну реалізацію . Шаблони асинхронності Можна виділити три найпопулярніші схеми асинхронних запитів . Послідовне виконання Використовується для пов'язаних завдань , які потрібно запускати один за одним . Наприклад , перший запит отримує назви фільмів , а другий ‒ інформацію про них . Паралельне виконання Застосовується для вирішення незалежних завдань , коли важливо , щоб виконалися всі запити . Наприклад , дані вебсторінки вантажаться з трьох серверів , а після цього починається рендеринг . Конкурентне виконання Використовується для вирішення незалежних завдань , коли важливо , щоб виконався хоча б один запит . Наприклад , відправка ідентичних запитів на різні сервера . Програмування