При багатопроцесорній обробці ви використовуєте кілька процесорів для розподілу своїх розрахунків. Оскільки кожен з центральних процесорів працює паралельно, ви фактично можете виконувати кілька завдань одночасно. Ви хочете використовувати багатопроцесорну обробку для завдань, пов’язаних із процесором . Прикладом може бути спроба обчислити суму всіх елементів величезного списку. Якщо ваша машина має 8 ядер, ви можете "розрізати" список на 8 менших списків і розрахувати суму кожного з цих списків окремо на окремому ядрі, а потім просто скласти ці цифри. Роблячи це, ви досягнете ~ 8-кратного прискорення.
У різьбленнявам не потрібні кілька процесорів. Уявіть собі програму, яка надсилає багато запитів HTTP до Інтернету. Якщо ви використовували однопотокову програму, вона зупиняла б виконання (блокувати) при кожному запиті, чекала відповіді, а потім продовжувала, коли отримала відповідь. Проблема тут полягає в тому, що ваш процесор насправді не виконує роботу, чекаючи, поки якийсь зовнішній сервер виконає цю роботу; тим часом це могло зробити якусь корисну роботу! Виправлення полягає у використанні потоків - ви можете створити багато з них, кожен відповідальний за запит певного вмісту з Інтернету. Приємна річ потоків полягає в тому, що, навіть якщо вони працюють на одному центральному процесорі, процесор час від часу "заморожує" виконання одного потоку і переходить до виконання іншого (це називається перемиканням контексту, і це відбувається постійно на недетермінованих інтервали). - використовувати різьбу.
asyncio - це по суті потоки, де не центральний процесор, а ви як програміст (або насправді ваш додаток) вирішуєте, де і коли відбувається перемикання контексту . У Python ви використовуєте await
ключове слово для призупинення виконання вашої програми (визначеної за допомогою async
ключового слова).