Параллельность - это выполнение двух задач параллельно в разных потоках. Однако асинхронные методы выполняются параллельно, но в одном потоке. Как это достигается? Кроме того, как насчет параллелизма?
Каковы различия между этими 3 понятиями?
Параллельность - это выполнение двух задач параллельно в разных потоках. Однако асинхронные методы выполняются параллельно, но в одном потоке. Как это достигается? Кроме того, как насчет параллелизма?
Каковы различия между этими 3 понятиями?
Ответы:
Параллельные и параллельные по сути являются одним и тем же принципом, который вы правильно предположили, оба связаны с задачами, выполняемыми одновременно, хотя я бы сказал, что параллельные задачи должны быть действительно многозадачными, выполняемыми «одновременно», тогда как одновременность может означать, что задачи совместно используют поток выполнения пока еще кажется выполняющимся параллельно.
Асинхронные методы напрямую не связаны с двумя предыдущими концепциями, асинхронность используется для представления впечатления от параллельных или параллельных задач, но фактически асинхронный вызов метода обычно используется для процесса, который должен выполнять работу вне текущего приложения, и мы не не хочу ждать и заблокировать наше приложение в ожидании ответа.
Например, получение данных из базы данных может занять некоторое время, но мы не хотим блокировать наш пользовательский интерфейс в ожидании данных. Асинхронный вызов принимает ссылку обратного вызова и возвращает выполнение обратно в ваш код, как только запрос был размещен в удаленной системе. Ваш пользовательский интерфейс может продолжать отвечать пользователю, пока удаленная система выполняет любую необходимую обработку, как только он возвращает данные в ваш метод обратного вызова, тогда этот метод может обновлять пользовательский интерфейс (или передавать это обновление) в зависимости от ситуации.
С точки зрения пользователя, это выглядит как многозадачность, но это не так.
РЕДАКТИРОВАТЬ
Вероятно, стоит добавить, что во многих реализациях асинхронный вызов метода вызовет ускорение потока, но это не существенно, это действительно зависит от выполняемой операции и того, как ответ может быть уведомлен обратно в систему.
Коротко,
Параллелизм означает несколько задач, которые запускаются, запускаются и завершаются в перекрывающиеся периоды времени, без определенного порядка. Параллелизм - это когда несколько задач ИЛИ несколько частей уникальной задачи буквально выполняются одновременно, например, на многоядерном процессоре.
Помните, что параллелизм и параллелизм - это не одно и то же.
Различия между параллелизмом и параллелизмом
Теперь давайте перечислим замечательные различия между параллелизмом и параллелизмом.
Параллельность - это когда две задачи могут запускаться, выполняться и завершаться в перекрывающиеся периоды времени. Параллелизм - это когда задачи выполняются буквально одновременно, например. на многоядерном процессоре.
Параллелизм - это композиция независимо выполняющихся процессов, а параллелизм - это одновременное выполнение (возможно, связанных) вычислений.
Параллелизм - это работа со многими вещами одновременно. Параллелизм заключается в том, чтобы делать много вещей одновременно.
Приложение может быть параллельным, но не параллельным, что означает, что оно обрабатывает более одной задачи одновременно, но никакие две задачи не выполняются одновременно.
Приложение может быть параллельным, но не параллельным, что означает, что оно одновременно обрабатывает несколько подзадач задачи в многоядерном процессоре.
Приложение не может быть ни параллельным, ни параллельным, что означает, что оно обрабатывает все задачи по одному, последовательно.
Приложение может быть как параллельным, так и параллельным, что означает, что оно одновременно обрабатывает несколько задач в многоядерном процессоре.
совпадение
Параллельность по существу применима, когда мы говорим о двух или более задачах. Когда приложение способно выполнять две задачи практически одновременно, мы называем это параллельным приложением. Хотя здесь задачи запускаются, похоже, одновременно, но по сути они МОГУТ не быть. Они используют функцию временной синхронизации процессора в операционной системе, где каждая задача выполняет часть своей задачи и затем переходит в состояние ожидания. Когда первая задача находится в состоянии ожидания, ЦП назначается второй задаче для выполнения своей части задачи.
Операционная система основана на приоритете задач, таким образом, назначает процессор и другие вычислительные ресурсы, например память; По очереди переходите ко всем задачам и дайте им возможность выполнить. Конечному пользователю кажется, что все задачи выполняются параллельно. Это называется параллелизмом.
параллелизм
Параллелизм не требует двух задач для существования. Он буквально физически выполняет части задач ИЛИ несколько задач, одновременно используя многоядерную инфраструктуру ЦП, назначая одно ядро для каждой задачи или подзадачи.
Параллелизм требует аппаратного обеспечения с несколькими процессорами, по сути. В одноядерном процессоре вы можете получить параллелизм, но НЕ параллелизм.
Асинхронные методы
Это не связано с параллелизмом и параллелизмом, асинхронность используется для представления впечатления от параллельных или параллельных задач, но фактически асинхронный вызов метода обычно используется для процесса, который должен выполнять работу вне текущего приложения, и мы не хотим подождите и заблокируйте наше приложение в ожидании ответа.
Параллельность - это когда чередуется выполнение нескольких задач, а не каждая задача выполняется последовательно одна за другой.
Параллелизм - это когда эти задачи фактически выполняются параллельно.
Асинхронность - это отдельная концепция (хотя и связана в некоторых контекстах). Это относится к тому факту, что одно событие может происходить в другое время (не синхронно) с другим событием. Приведенные ниже диаграммы иллюстрируют разницу между синхронным и асинхронным выполнением, когда участники могут соответствовать различным потокам, процессам или даже серверам.
У каждого возникают проблемы с сопоставлением асинхронного параллелизма или параллелизма, поскольку асинхронный не является антонимом параллельного или параллельного. Это антоним Синхронный. Который просто указывает, будет ли что-то, в этом случае потоки, синхронизироваться с чем-то другим, в этом случае с другим потоком
Существует несколько сценариев, в которых может происходить параллелизм:
Асинхронность - это означает, что ваша программа выполняет неблокирующие операции. Например, он может инициировать запрос на удаленный ресурс через 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
решается проблема параллелизма:
private async void ButtonClick(object sender, RoutedEventArgs e)
{
// run a method in another thread
await Task.Run(()=> HeavyMethod(txt));
// modify UI object in UI thread
txt.Text = "done";
}
// This is a thread-safe method. You can run it in any thread
internal void HeavyMethod(TextBox textBox)
{
while (stillWorking)
{
// use Dispatcher to safely invoke UI operations
textBox.Dispatcher.Invoke(() =>
{
// UI operations outside of invoke will cause ThreadException
textBox.Text += ".";
});
}
}
Я собираюсь сделать это коротким и интересным, чтобы обернуть вашу голову вокруг этих понятий.
Параллельные и параллельные - способы выполнения задач.
Возьмите пример из реальной жизни: есть задача, которая требует от вас съесть целый огромный торт и спеть целую песню. Ты выиграешь, если будешь самым быстрым, кто поет всю песню и заканчивает торт. Так что правило таково, что вы поете и едите одновременно . То, как вы это делаете, не относится к правилу. Вы можете съесть весь торт, потом спеть всю песню, или вы можете съесть половину торта, потом спеть половину песни, затем сделать это снова и т. Д.
Параллелизм - это особый вид параллелизма, когда задачи действительно выполняются одновременно. В информатике параллелизм может быть достигнут только в многоядерных средах.
Синхронный и Асинхронный - Модели программирования.
При синхронизации вы пишете код в виде шагов, которые выполняются по порядку, сверху вниз. В модели асинхронного программирования вы пишете код в виде задач, которые затем выполняются одновременно. Одновременное выполнение означает, что все задачи, вероятно, выполняются одновременно.