Подтвердить что ты не робот

Что означает, что метод должен быть асинхронным?

Что такое асинхронный метод. Кажется, я знаю, но я все время путаю его с parallelism. Я не уверен, какая разница между асинхронным методом и чем является parallelism.

Также в чем разница между использованием классов threading и асинхронных классов?

ИЗМЕНИТЬ

Некоторый код, демонстрирующий разницу между асинхронными, потоковыми и parallelism, будет полезен.

4b9b3361

Ответ 1

Что такое асинхронные методы?

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

Асинхронный метод - это метод, который мы вызываем, чтобы начать длительную операцию. Метод должен делать то, что нужно для начала операции, и возвращать "очень быстро", чтобы не было задержки обработки.

Асинхронные методы обычно возвращают токен, который вызывающий может использовать для запроса, если операция еще завершена, и каков ее результат. В некоторых случаях они принимают ответ (делегат) в качестве аргумента; когда операция завершена, обратный вызов вызывается, чтобы сигнализировать вызывающему, что их результаты готовы и передать их обратно. Это является обычно используемой сигнатурой обратного вызова, хотя, конечно, в общем случае обратный вызов может выглядеть как угодно.

Итак, кто действительно запускает длительную операцию?

Я сказал выше, что метод async запускает операцию длины, но что означает "начало" в этом контексте? Поскольку метод немедленно возвращается, где выполняется фактическая работа?

В общем случае поток выполнения должен следить за процессом. Поскольку это не тот поток, который вызвал метод async, который делает паузу, кто это делает? Ответ: поток, выбранный для этой цели из управляемого пула потоков.

Какая связь с потоками?

В этом контексте моя интерпретация "потоковой передачи" просто заключается в том, что вы явно создаете собственный поток и делегируете его для одновременного выполнения задачи. Этот поток будет блокироваться на некоторое время и, по-видимому, будет сигнализировать ваш "основной" поток (который может продолжить выполнение), когда операция завершена.

Этот назначенный рабочий поток может быть извлечен из пула потоков (будьте осторожны: очень длительная обработка в потоке пула потоков не рекомендуется!), или это может быть тот, который вы начали именно для этой цели.

Ответ 2

Во-первых, что такое метод и что такое поток? Метод - это единица работы, которая либо (1) выполняет полезный побочный эффект, как запись в файл, либо (2) вычисляет результат, например, делает растровое изображение фрактала. Нить - это рабочий, который выполняет эту работу.

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

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

Обычно, как делает асинхронный метод, он делает другого рабочего - он захватывает поток из пула. Это особенно верно, если методу необходимо сильно использовать процессор. Но не всегда; нет требования, чтобы асинхронный метод запустил другой поток.

Это имеет смысл?

Ответ 3

Скажите, что вам нужно убирать дом, готовить обед и укладывать детей в постель.

Синхронный:

Вы убираете дом, затем готовите обед, затем кладите детей в постель.

Parallel:

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

Асинхронный:

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

Ответ 4

Сначала вы поняли, что если вы хотите, чтобы parallelism все структуры должны были быть параллельными, я имею в виду, что если у вас есть асинхронный метод, вам нужен асинхронный вызов. В веб-сервисах или веб-материалах асинхронные методы могут быть (одним из многих способов), вызываемых с AJAX, который является асинхронным. В одном методе вы можете иметь несколько потоков, это ключевое различие между асинхронными и многопоточными потоками. И главное: разница между стандартным методом и асинхронным методом заключается в том, что если вы одновременно совершаете 2 вызова стандартного метода к одному и тому же контроллеру с асинхронным абонентом (например, AJAX), второй вызов начнется только тогда, когда первый вызов уже завершен, если методы, которые вы назвали, были асинхронными, оба вызова начнутся в одно и то же время, с серверами с несколькими ядрами он может выполнить дважды (2 вызова) стандартную скорость. Скорость parallelism измеряется с помощью law.