Python: каковы преимущества асинхронности перед потоками? [закрыто]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python: каковы преимущества асинхронности перед потоками? [закрыто]

Сообщение Anonymous »

Мне было трудно понять, как и почему асинхронная функциональность работает в Python, и я до сих пор не уверен, что все правильно понимаю (особенно часть «почему»). Поправьте меня, если я ошибаюсь.
Цель как асинхронных методов, так и потоков — обеспечить возможность одновременной обработки нескольких задач.
Потоки подход выглядит простым и интуитивно понятным. Если программа на Python обрабатывает несколько задач одновременно, у нас есть поток (может быть с подпотоками) для каждой задачи, стек каждого потока отражает текущий этап обработки соответствующей задачи. Все просто, есть простые в использовании механизмы запуска нового потока и ожидания от него результатов.
Насколько я понимаю, единственная проблема такого подхода в том, что потоки дорогие.
Другой подход — использование асинхронных сопрограмм. Я вижу несколько неудобств в этом подходе. Я назову лишь пару из них. Теперь у нас есть два типа методов: обычные методы и асинхронные методы. В 90% случаев единственная разница заключается в том, что вам нужно помнить, что этот метод является асинхронным, и не забывать использовать ключевое слово await при вызове этого метода. И да, вы не можете вызвать метод async из обычных. И весь этот синтаксический мусор async - await по всей программе предназначен только для того, чтобы указать, что этот метод способен передать управление циклу сообщений.
Подход Threads свободен от всех этих неудобств. Но подход async - await позволяет обрабатывать гораздо больше параллельных задач, чем подход потоков. Как это возможно?
Для каждой параллельной задачи у нас по-прежнему есть стек вызовов, только теперь это стек вызовов сопрограмм. Я не совсем уверен, но похоже, что это ключевое отличие: обычные стеки — это стеки операционной системы, они дорогие, стеки сопрограмм — это просто структуры Python, они намного дешевле. Правильно ли я понимаю?
Если это правильно, не лучше ли было бы отделить потоки/стеки вызовов Python от потоков/стеков вызовов ОС, чтобы удешевить потоки Python?
Извините, если вопрос глупый. Я уверен, что есть несколько причин, по которым асинхронность- был выбран подход. Просто хочу понять эти причины.
Обновление:
Для тех, кто не считает этот вопрос плохим и слишком широко.
Вот статья Unyielding, которая начинается с объяснений, почему потоки плохи, и рекламирует асинхронный подход. Основной тезис: потоки — это зло, слишком сложно рассуждать о подпрограмме, которая может выполняться из произвольного числа потоков одновременно.
Спасибо Натаниэлю Дж. Смиту (автору библиотеки Python Trio). кто подсказал эту ссылку.
Кстати, доводы в статье для меня не убедительны, но все же могут быть полезны.
Позднее обновление
Только что нашел очень хороший пост в блоге о потоках и асинхронности в Python и других языках. Мудрость игровой площадки: потоки превосходят Async/Await.

Подробнее здесь: https://stackoverflow.com/questions/480 ... er-threads
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Java-сервлет, поддержка асинхронности, управление потоками
    Anonymous » » в форуме JAVA
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Каковы преимущества такого способа кодирования? [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    57 Просмотры
    Последнее сообщение Anonymous
  • Каковы некоторые основные преимущества и недостатки использования облачных вычислений для бизнеса? [закрыто]
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • C# Очереди сообщений между потоками и общие проблемы с потоками
    Anonymous » » в форуме C#
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • C# Очереди сообщений между потоками и общие проблемы с потоками
    Anonymous » » в форуме C#
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»