Параллельность - это выполнение двух задач параллельно в разных потоках. Однако асинхронные методы выполняются параллельно, но в одном потоке. Как это достигается? Кроме того, как насчет параллелизма?
Каковы различия между этими 3 понятиями?
multithreading
asynchronous
concurrency
GurdeepS
источник
источник
Ответы:
Параллельные и параллельные по сути являются одним и тем же принципом, который вы правильно предположили, оба связаны с задачами, выполняемыми одновременно, хотя я бы сказал, что параллельные задачи должны быть действительно многозадачными, выполняемыми «одновременно», тогда как одновременность может означать, что задачи совместно используют поток выполнения пока еще кажется выполняющимся параллельно.
Асинхронные методы напрямую не связаны с двумя предыдущими концепциями, асинхронность используется для представления впечатления от параллельных или параллельных задач, но фактически асинхронный вызов метода обычно используется для процесса, который должен выполнять работу вне текущего приложения, и мы не не хочу ждать и заблокировать наше приложение в ожидании ответа.
Например, получение данных из базы данных может занять некоторое время, но мы не хотим блокировать наш пользовательский интерфейс в ожидании данных. Асинхронный вызов принимает ссылку обратного вызова и возвращает выполнение обратно в ваш код, как только запрос был размещен в удаленной системе. Ваш пользовательский интерфейс может продолжать отвечать пользователю, пока удаленная система выполняет любую необходимую обработку, как только он возвращает данные в ваш метод обратного вызова, тогда этот метод может обновлять пользовательский интерфейс (или передавать это обновление) в зависимости от ситуации.
С точки зрения пользователя, это выглядит как многозадачность, но это не так.
РЕДАКТИРОВАТЬ
Вероятно, стоит добавить, что во многих реализациях асинхронный вызов метода вызовет ускорение потока, но это не существенно, это действительно зависит от выполняемой операции и того, как ответ может быть уведомлен обратно в систему.
источник
Коротко,
Параллелизм означает несколько задач, которые запускаются, запускаются и завершаются в перекрывающиеся периоды времени, без определенного порядка. Параллелизм - это когда несколько задач ИЛИ несколько частей уникальной задачи буквально выполняются одновременно, например, на многоядерном процессоре.
Различия между параллелизмом и параллелизмом
Теперь давайте перечислим замечательные различия между параллелизмом и параллелизмом.
Параллельность - это когда две задачи могут запускаться, выполняться и завершаться в перекрывающиеся периоды времени. Параллелизм - это когда задачи выполняются буквально одновременно, например. на многоядерном процессоре.
Параллелизм - это композиция независимо выполняющихся процессов, а параллелизм - это одновременное выполнение (возможно, связанных) вычислений.
Параллелизм - это работа со многими вещами одновременно. Параллелизм заключается в том, чтобы делать много вещей одновременно.
Приложение может быть параллельным, но не параллельным, что означает, что оно обрабатывает более одной задачи одновременно, но никакие две задачи не выполняются одновременно.
Приложение может быть параллельным, но не параллельным, что означает, что оно одновременно обрабатывает несколько подзадач задачи в многоядерном процессоре.
Приложение не может быть ни параллельным, ни параллельным, что означает, что оно обрабатывает все задачи по одному, последовательно.
Приложение может быть как параллельным, так и параллельным, что означает, что оно одновременно обрабатывает несколько задач в многоядерном процессоре.
совпадение
параллелизм
Асинхронные методы
источник
Параллельность - это когда чередуется выполнение нескольких задач, а не каждая задача выполняется последовательно одна за другой.
Параллелизм - это когда эти задачи фактически выполняются параллельно.
Асинхронность - это отдельная концепция (хотя и связана в некоторых контекстах). Это относится к тому факту, что одно событие может происходить в другое время (не синхронно) с другим событием. Приведенные ниже диаграммы иллюстрируют разницу между синхронным и асинхронным выполнением, когда участники могут соответствовать различным потокам, процессам или даже серверам.
источник
У каждого возникают проблемы с сопоставлением асинхронного параллелизма или параллелизма, поскольку асинхронный не является антонимом параллельного или параллельного. Это антоним Синхронный. Который просто указывает, будет ли что-то, в этом случае потоки, синхронизироваться с чем-то другим, в этом случае с другим потоком
источник
Существует несколько сценариев, в которых может происходить параллелизм:
Асинхронность - это означает, что ваша программа выполняет неблокирующие операции. Например, он может инициировать запрос на удаленный ресурс через HTTP, а затем продолжить выполнение какой-то другой задачи, ожидая получения ответа. Это похоже на то, когда вы отправляете электронное письмо, а затем продолжаете свою жизнь, не дожидаясь ответа.
Параллелизм - это означает, что ваша программа использует аппаратное обеспечение многоядерных машин для одновременного выполнения задач, разбивая работу на задачи, каждая из которых выполняется на отдельном ядре. Это похоже на пение в душе: на самом деле вы делаете две вещи одновременно.
Многопоточность - это программная реализация, позволяющая выполнять разные потоки одновременно. Многопоточная программа, кажется, делает несколько вещей одновременно, даже когда она работает на одноядерном компьютере. Это немного похоже на общение с разными людьми через разные окна чата; хотя вы на самом деле переключаетесь назад и вперед, в результате вы получаете несколько разговоров одновременно.
источник
От http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html
источник
Параллельно:Это широкий термин, который означает, что два фрагмента кода выполняют это «одновременно». Неважно, является ли это «реальным» параллелизмом или имитируется ли какой-то умный дизайн. Дело в том, что вы можете запускать «задачи» одновременно, а затем управлять ими по отдельности (с помощью мьютекса и всех соответствующих приемов). Но обычно вы предпочитаете использовать слово «параллельный» только для «истинного» параллелизма, например: вы делаете это с помощью не-кооперативной многозадачности (будь то ядра CPU / GPU или только на программном уровне, позволяя ОС управлять им). на очень низком уровне). Люди не хотят говорить «параллельный» только для сложного последовательного кода, который имитирует параллелизм, как, например, вы можете найти в javascript окна браузера. Отсюда причина, по которой люди в этой теме говорят: «асинхронный не имеет ничего общего с параллелизмом». Ну, это так, но не путайте их.
Одновременность: не может быть параллелизма без параллелизма (будь то симулированный или реальный, как я объяснил выше), но этот термин специально фокусируется на том факте, что две системы будут пытаться получить доступ к одному и тому же ресурсу одновременно в какой-то момент. Это подчеркивает тот факт, что вам придется иметь дело с этим.
Асинхронный : все правы, говоря, что асинхронный не связан с параллелизмом, но он прокладывает путь к нему (бремя, чтобы вы делали вещи параллельно или нет - продолжайте читать).
«Асинхронный» относится к представлению параллелизма, которое формализует три основные вещи, обычно используемые в параллелизме: 1) определить инициализацию задачи (скажем, когда она начинается и какие параметры она получает), 2) что должно быть сделано после ее завершения и 3) Что код должен продолжать делать между ними.
Но это все еще только синтаксис (обычно он представляется как методы обратного вызова). За кулисами базовая система может просто решить, что эти так называемые «задачи» - это просто фрагменты кода, которые накапливаются до тех пор, пока не завершит код, который в настоящее время выполняется. И затем он складывает их один за другим и выполняет их последовательно. Или не. Это может также создать поток для каждой задачи и запустить их параллельно. Какая разница? Эта часть не входит в понятие;)
источник
Здесь есть немного семантики, чтобы прояснить это:
Параллелизм или параллелизм - это вопрос конкуренции за ресурсы , тогда как асинхронный - это поток управления .
Различные процедуры (или составляющие их операции ) называются асинхронными, когда нет детерминированной реализации порядка их обработки ; другими словами, существует вероятность того, что любой из них может быть обработан в любой момент времени T. По определению, несколько процессоров (например, процессоры или люди) позволяют обрабатывать несколько из них одновременно; на одном процессоре их обработка чередуется (например, потоки).
Асинхронные процедуры или операции называются параллельными, когда они совместно используют ресурсы ; Параллелизм - это определенная возможность конкуренции в любой момент времени. Параллелизм тривиально гарантирован, когда нет общих ресурсов (например, другой процессор и хранилище); в противном случае контроль параллелизма должен быть решен.
Следовательно, асинхронная процедура или операция может обрабатываться параллельно или одновременно с другими.
источник
Параллелизм означает выполнение нескольких задач одновременно, но не обязательно одновременно. Когда вам нужно выполнить более одной задачи, но у вас есть один ресурс, мы обращаемся к параллелизму. В одноядерной среде параллелизм достигается переключением контекста.
Параллелизм подобен одновременному выполнению нескольких задач, когда вы можете петь и купаться вместе. Теперь вы делаете задание параллельно.
Асинхронный - это то, что связано с выполнением потока в асинхронной модели, когда одна задача выполняется, вы можете переключиться на другую задачу, не дожидаясь завершения предыдущей.
Асинхронное программирование помогает нам достичь параллелизма. Асинхронное программирование в многопоточной среде - это способ достижения параллелизма.
источник
«Синхронизация и асинхронность - это модели программирования. Параллельные и параллельные - это способы выполнения задач ...». Источник: https://medium.com/better-programming/sync-vs-async-vs-concurrent-vs-parallel-5754cdb60f66
Другими словами, sync и async описывают, как ваша программа выполняется при вызове функции (будет ли она ждать или будет выполняться?), В то время как параллельная и параллельная описывают, как будет выполняться функция (задача) (concurrent = возможно, выполняется в в то же время, параллельно = эффективно выполняется в то же время).
источник
Параллелизм против параллельности: одновременность в один момент времени может быть выполнена только одна задача. Пример: параллельность процессора с одним процессором, в одной точке мы можем выполнять несколько задач. пример: двухъядерный или многоядерный процессор
источник
Здесь я объясню с некоторыми примерами
параллелизм
ГПУ использует параллельную обработку для обработки один и тот же блок кода (АКА ядра ) на тысячи физических и логических потоков. В идеале процесс начинается и заканчивается для всех потоков одновременно. Одно ядро ЦП без гиперпоточности не может выполнять параллельную обработку.
Примечание: я сказал в идеале, потому что когда вы запускаете ядро с размерами вызовов 7M на оборудовании с потоками 6M, оно должно дважды запускать один и тот же код на всех потоках 6M параллельно, потребляя при этом все потоки 6M каждый раз.
Примечание. Параллелизм не ограничивается графическим процессором.
совпадение
Веб - служба получает много мелких запросов в режиме реального времени , и он должен обрабатывать каждый из этих запросов по- разному, в любое время и независимо от других запросов или каких - либо внутренних работ. Тем не менее, вы хотите, чтобы веб-служба работала постоянно и без ущерба для состояния данных или работоспособности системы.
Просто представьте, что пользователь обновляет запись, а другой пользователь одновременно удаляет эту же запись.
Примечание . Эти запросы обычно потребляют некоторые важные ресурсы, такие как память, подключение к базе данных или пропускная способность. Тем не менее, вы хотите, чтобы веб-сервис всегда был отзывчивым. Асинхронность является ключом, чтобы сделать его отзывчивым , а не параллельным
Асинхронный
Один тяжелый процесс (например, операция ввода-вывода) может легко заблокировать графический интерфейс, если он запущен в потоке графического интерфейса. Чтобы гарантировать отзывчивость пользовательского интерфейса , тяжелый процесс может выполняться асинхронно. Лучше запускать подобные асинхронные операции по одной . например, несколько операций ввода-вывода могут быть значительно медленнее, если они выполняются одновременно, поэтому лучше поставить их в очередь до конца
Примечание: асинхронная операция, которая выполняется одновременно (т.е. более одного раза за раз), является параллельной операцией.
Примечание: параллелизм и асинхронность часто путают друг с другом. Параллелизм относится к различным частям системы, работающим вместе, не мешая друг другу (эти проблемы часто решаются с помощью замков, семафор или мьютексов). Асинхронность - это способ достижения отзывчивости (например, многопоточность).
* Примечание: асинхронность и многопоточность часто путают друг с другом. Асинхронный код не обязательно предполагает новый поток. это может быть аппаратная операция или, как Стефан называет это чистой операцией, прочитайте это
Например, в приведенном ниже коде WPF + C #
await Task.Run(()=> HeavyMethod(txt))
решается проблема асинхронности, аtextBox.Dispatcher.Invoke
решается проблема параллелизма:источник
Я собираюсь сделать это коротким и интересным, чтобы обернуть вашу голову вокруг этих понятий.
Параллельные и параллельные - способы выполнения задач.
Синхронный и Асинхронный - Модели программирования.
источник