Хочу представить вашему вниманию перевод статьи Параллелизм, многопоточность и асинхронное программирование: объяснение .
В последнее время, выступая на мероприятиях и отвечая на вопросы аудитории между докладами об асинхронном программировании, я обнаружил, что некоторые люди путают многопоточное и асинхронное программирование, а некоторые говорят, что это одно и то же.
Итак, я решил уточнить эти термины и добавить еще одно понятие: параллелизм.
Здесь есть две концепции и обе они совершенно разные: первая — синхронное и асинхронное программирование, вторая — однопоточные и многопоточные приложения.
Каждая модель программирования (синхронная или асинхронная) может работать в однопоточной или многопоточной среде.
Давайте обсудим их подробно.
Модель синхронного программирования — это модель программирования, в которой потоку назначается одна задача и начинается ее выполнение.
Когда задача выполнена, можно перейти к другой задаче.
В этой модели невозможно остановить выполнение задачи, чтобы тем временем выполнить другую задачу.
Давайте обсудим, как эта модель работает в одно- и многопоточных сценариях.
Одинарная резьба — если у нас есть несколько задач, которые необходимо выполнить, и в текущей системе предусмотрен один поток, который может работать со всеми задачами, то это выполняется одна за другой и процесс выглядит так:
Здесь мы видим, что у нас есть поток (Thread 1) и 4 задачи, которые необходимо выполнить.
Поток начинает выполняться один за другим и выполняет их все.
(Порядок выполнения задач не влияет на общее выполнение; у нас может быть другой алгоритм, позволяющий расставлять приоритеты задач.
Многопоточность – в этом сценарии мы использовали множество потоков, которые могут принимать задачи и начинать над ними работать.
У нас есть пулы потоков (новые потоки также создаются в зависимости от необходимости и наличия ресурсов) и множество задач.
Таким образом, поток может работать следующим образом:
Здесь мы видим, что у нас есть 4 потока и одинаковое количество задач для выполнения, и каждый поток начинает работать над ними.
Это идеальный сценарий, но в обычных условиях мы используем больше задач, чем количество доступных потоков, поэтому освободившийся поток получает другое задание.
Как уже упоминалось, создание нового потока происходит не каждый раз, поскольку для этого требуются системные ресурсы, такие как процессор, память, и должно быть определено начальное количество потоков.
Теперь поговорим об асинхронной модели и о том, как она ведет себя в однопоточной и многопоточной среде.
Модель асинхронного программирования – в отличие от модели синхронной программы здесь поток, однажды начав выполнение задачи, может приостановить выполнение, сохраняя текущее состояние, и тем временем приступить к выполнению другой задачи.
Здесь мы видим, что за выполнение всех задач отвечает один поток и задачи чередуются друг с другом.
Если наша система способна иметь много потоков, то все потоки могут работать в асинхронной модели, как показано ниже:
Здесь мы видим, что одна и та же задача, скажем, T4, T5, T6. обрабатывается несколькими потоками.
В этом красота этого сценария.
Как мы видим, задача T4 начала выполнение сначала потоком 1 и завершилась потоком 2. Аналогично задача T6 выполняется потоком 2, потоком 3 и потоком 4. Это показывает максимальное использование потоков.
Итак, до сих пор мы обсудили 4 сценария:
- Синхронный одиночный поток
- Синхронный многопоточный
- Асинхронный одиночный поток
- Асинхронный многопоточный
Параллелизм Проще говоря, параллелизм — это способ одновременной обработки нескольких запросов.
Поскольку мы обсуждали два сценария, когда обрабатывалось несколько запросов, многопоточное программирование и асинхронная модель (одно- и многопоточная).
В случае асинхронной модели, будь она однопоточной или многопоточной, при выполнении многих задач часть из них приостанавливается, а часть выполняется.
Функций много, но это выходит за рамки данной статьи.
Как обсуждалось ранее, за асинхронным программированием наступает новая эра.
Почему это так важно? Преимущества асинхронного программирования Для каждого приложения очень важны две вещи — удобство использования и производительность.
Простота использования, поскольку пользователь нажимает кнопку, чтобы сохранить некоторые данные, что, в свою очередь, требует выполнения множества задач, таких как чтение и заполнение данных во внутреннем объекте, установление соединения с SQL и сохранение их там.
В свою очередь SQL запускается на другой машине в сети и выполняется под другим процессом, это может занять много времени.
Таким образом, если запрос обрабатывается одним процессом, экран будет зависать до завершения процесса.
Вот почему сегодня многие приложения и платформы полностью полагаются на асинхронную модель.
Производительность приложений и системы также очень важна.
Было замечено, что во время выполнения запроса около 70-80% из них ожидают выполнения зависимых задач.
Таким образом, это можно максимально использовать в асинхронном программировании, где после передачи задачи в другой поток (например, SQL) текущий поток сохраняет состояние и доступен для выполнения другим процессом, а когда задача sql завершается, любой свободный поток .
может взять на себя эту задачу.
Асинхронность в ASP.NET Асинхронность в ASP.NET может значительно повысить производительность вашего приложения.
Вот как IIS обрабатывает запрос:
Когда IIS получает запрос, он берет поток из пула потоков CLR (IIS не имеет пула потоков, а вместо этого использует пул потоков CLR) и назначает его ему, который затем обрабатывает запрос.
Поскольку количество потоков ограничено и новые можно создавать с определенным лимитом, то если поток большую часть времени находится в состоянии ожидания, то он сильно ударит по вашему серверу, можно считать, что это реальность.
Но если вы напишете асинхронный код (который теперь становится очень простым и может быть написан почти идентично синхронному коду с использованием новых ключевых слов async/await), тогда он будет работать намного быстрее, и пропускная способность вашего сервера значительно увеличится, потому что вместо того, чтобы чего-то ждать.
.
После завершения он будет доступен пулу потоков для нового запроса.
Если приложение имеет множество зависимостей и длительный процесс выполнения, то асинхронное программирование будет для этого приложения не меньшим благом.
Итак, теперь мы поняли разницу многопоточного асинхронного программирования и преимущества, которые мы можем получить, используя модель асинхронного программирования.
Теги: #асинхронное программирование #многопоточное программирование #параллелизм #потоки #задачи #Высокая производительность #.
NET #ASP #ASP
-
Худшая Реклама 2015 Года.
19 Oct, 24 -
Ssh Для Частого Использования
19 Oct, 24