Как сформулировать разницу между асинхронным и параллельным программированием? - PullRequest
116 голосов
/ 26 мая 2011

Многие платформы продвигают асинхронность и параллелизм как средство для улучшения отзывчивости.В целом я понимаю разницу, но часто мне сложно сформулировать это в своем собственном уме, а также для других.

Я программист, работающий в обычном режиме и довольно часто использующий асинхронные вызовы и обратные вызовы.Параллелизм кажется экзотическим.

Но я чувствую, что их легко сопоставить, особенно на уровне языкового дизайна.Хотелось бы получить четкое описание того, как они связаны (или нет), и классов программ, в которых каждая из них лучше всего применяется.

Ответы [ 13 ]

3 голосов
/ 01 июля 2018

Асинхронный Допустим, вы являетесь контактным лицом для своего клиента, и вам необходимо реагировать, т. Е. Вам нужно делиться статусом, сложностью работы, необходимыми ресурсами и т. Д. При каждом запросе. Теперь у вас есть трудоемкая операция, и вы не можете ее выполнить, так как вам нужно реагировать на клиента 24/7. Следовательно, вы делегируете трудоемкую операцию кому-то другому, чтобы вы могли реагировать. Это асинхронно.

Параллельное программирование Допустим, у вас есть задача прочитать, скажем, 100 строк из текстового файла, а чтение одной строки занимает 1 секунду. Следовательно, вам потребуется 100 секунд, чтобы прочитать текстовый файл. Теперь вы обеспокоены тем, что клиент должен ждать 100 секунд, чтобы завершить операцию. Следовательно, вы создаете еще 9 клонов и заставляете каждого из них читать 10 строк из текстового файла. Теперь на чтение 100 строк уходит всего 10 секунд. Следовательно, у вас лучшая производительность.

Подводя итог, можно сказать, что асинхронное кодирование выполняется для обеспечения быстрого отклика, а параллельное программирование - для повышения производительности.

2 голосов
/ 01 июля 2018

Как правило, есть только два способа сделать больше, чем одну вещь каждый раз.Один - асинхронный , другой - параллельный .

На высоком уровне, например, популярный сервер NGINX и знаменитый Python library Tornado , они оба полностью используют асинхронную парадигму, которая заключается в том, что однопоточный сервер может одновременно обслуживать тысячи клиентов (некоторые IOloop и callback ).Использование ECF (последующее управление исключениями), которое может реализовать парадигму асинхронного программирования.так что асинхронный иногда не делает ничего одновременного, но некоторая связанная с ним работа, асинхронный может действительно повысить производительность.

Парадигма параллельная всегда относится к многопоточности и многопроцессорности.Это может полностью использовать многоядерные процессоры, делать вещи действительно одновременно.

0 голосов
/ 10 марта 2019

Сводка всех приведенных выше ответов

  1. параллельные вычисления:

▪ решает проблему пропускной способности. Забота о разбиении большой задачи на более мелкие куски

▪ относится к машине (требуется несколько машин / ядер / процессоров / процессоров), например: ведущий-ведомый, карта уменьшена.

Параллельные вычисления обычно включают центральный элемент управления, который распределяет работу между несколькими процессорами

  1. асинхронная:

▪ решает проблему задержки то есть проблема «ожидания» для завершения дорогостоящей операции, прежде чем вы сможете сделать что-либо еще

▪ относится к теме (требуется многопоточность)

Потоки (с использованием Thread, Runnable, Executor) - это один из основных способов выполнения асинхронных операций в Java

...