В чем разница между синхронным и асинхронным режимами веб-api в crm онлайн? [Дубликат]

В дополнение к другим ответам, я рекомендую эту онлайн-службу open source jsonschema2pojo.org для быстрого генерации Java-классов из json или json-схемы для GSON, Jackson 1.x или Jackson 2.x. Например, если у вас есть:

{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    }
    "posts": [
         {
              "post_id": "123456789012_123456789012",
              "actor_id": 1234567890,
              "picOfPersonWhoPosted": "http://example.com/photo.jpg",
              "nameOfPersonWhoPosted": "Jane Doe",
              "message": "Sounds cool. Can't wait to see it!",
              "likesCount": 2,
              "comments": [],
              "timeOfPost": 1234567890
         }
    ]
}

jsonschema2pojo.org для генерируемого GSON:

@Generated("org.jsonschema2pojo")
public class Container {
    @SerializedName("pageInfo")
    @Expose
    public PageInfo pageInfo;
    @SerializedName("posts")
    @Expose
    public List posts = new ArrayList();
}

@Generated("org.jsonschema2pojo")
public class PageInfo {
    @SerializedName("pageName")
    @Expose
    public String pageName;
    @SerializedName("pagePic")
    @Expose
    public String pagePic;
}

@Generated("org.jsonschema2pojo")
public class Post {
    @SerializedName("post_id")
    @Expose
    public String postId;
    @SerializedName("actor_id")
    @Expose
    public long actorId;
    @SerializedName("picOfPersonWhoPosted")
    @Expose
    public String picOfPersonWhoPosted;
    @SerializedName("nameOfPersonWhoPosted")
    @Expose
    public String nameOfPersonWhoPosted;
    @SerializedName("message")
    @Expose
    public String message;
    @SerializedName("likesCount")
    @Expose
    public long likesCount;
    @SerializedName("comments")
    @Expose
    public List comments = new ArrayList();
    @SerializedName("timeOfPost")
    @Expose
    public long timeOfPost;
}

881
задан JJJ 26 June 2014 в 12:50
поделиться

20 ответов

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

Как говорится, в контексте компьютеров это означает выполнение процесса или задачи на другом «потоке». Поток представляет собой серию команд (блок кода), которые существуют как единое целое. Операционная система может управлять несколькими потоками и назначать потоку кусок («срез») процессорного времени перед переключением на другой поток, чтобы дать ему поворот сделать некоторую работу. По своей сути (pardon pun) процессор может просто выполнить команду, у нее нет понятия делать две вещи за один раз. Операционная система имитирует это путем распределения срезов времени на разные потоки.

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

Асинхронное программирование - сложная тема из-за семантики того, как вещи связаны вместе, когда вы можете сделать их в одно и то же время. Существует множество статей и книг по этому вопросу; посмотрите!

1377
ответ дан MeanwhileInHell 27 August 2018 в 11:06
поделиться

Я попытаюсь объяснить так просто, как только смогу, чтобы вы (надеюсь) помните:

Синхронное выполнение

Мой босс - занятый человек. Он говорит мне написать код. Я говорю ему: Хорошо. Я начинаю, и он смотрит на меня как стервятник, стоящий позади меня, с моего плеча. Я как «Чувак, WTF: почему бы вам не пойти и не сделать что-то, пока я это закончил?»

он выглядит так: «Нет, я жду прямо здесь пока ты не закончишь ». Это синхронно.

Асинхронное выполнение

Босс говорит мне сделать это, и вместо того, чтобы ждать там для моей работы, босс уходит и выполняет другие задачи. Когда я заканчиваю свою работу, я просто докладываю своему боссу и говорю: «Я СОВЕРШЕН!» Это асинхронное выполнение.

Это действительно так просто! Надеюсь, это поможет.

(Возьмите мой совет: НИКОГДА не работайте с боссом позади вас.)

248
ответ дан BKSpurgeon 27 August 2018 в 11:06
поделиться

Как действительно простой пример,

SYNCHRONOUS

Представьте, что 10 школьников обучили ходить в очереди на дороге.

Третий студент завязал шнурок. Теперь она остановилась и снова завязалась.

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

10-->9-->8-->7-->6-->5-->4-->3.     2-->1-->

ASYNCHRONOUS

Просто представьте, что 10 случайных людей ходят по одной дороге. Разумеется, они не в очереди, просто случайно ходят по разным местам на дороге в разных темпах.

Шляпа 3-го лица развязана. Она остановилась, чтобы снова связать ее.

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

10-->    9-->
   8--> 7-->   6-->
 5-->  4-->  3. 2-->
1-->
10
ответ дан Dasun Nirmitha 27 August 2018 в 11:06
поделиться

Синхронный : когда задача выполняется синхронно, вы ждете завершения задачи, прежде чем перейти к другой задаче. Одна задача зависит от конца другого

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

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

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

4
ответ дан dfi 27 August 2018 в 11:06
поделиться

В отношении « в то же время » определение синхронного выполнения (которое иногда запутывает), вот хороший способ его понять:

Синхронное выполнение: Все задачи внутри блока кода выполняются одновременно.

Асинхронное выполнение: Все задачи в блоке кода выполняются не одновременно.

1
ответ дан docta_faustus 27 August 2018 в 11:06
поделиться

В двух словах, синхронизация относится к двум или нескольким начальным и конечным точкам процессов, NOT их исполнениям. В этом примере конечная точка Process A синхронизируется с начальной точкой Process B:

SYNCHRONOUS
   |--------A--------|
                     |--------B--------|

Астрономические процессы, с другой стороны, не имеют , а не синхронизировать начальную и конечную точки:

ASYNCHRONOUS
   |--------A--------|
         |--------B--------|

Если процесс A перекрывает процесс B, они работают одновременно или синхронно (определение словаря), следовательно, путаница.

ОБНОВЛЕНИЕ: Чарльз Бретана улучшил свой ответ , поэтому этот ответ теперь просто простая (потенциально упрощенная) мнемоника.

27
ответ дан entr0p3te 27 August 2018 в 11:06
поделиться

Другое английское определение Synchronize is Здесь

Coordinate; Комбинация.

Я думаю, что это лучшее определение, чем «Происшествие в одно и то же время». Это тоже определение, но я не думаю, что это тот, который соответствует тому, как он используется в компьютерной науке.

Таким образом, асинхронная задача не координируется с другими задачами, тогда как синхронная задача СО координируется с другими задачами, поэтому один заканчивается до начала другого.

Как это достигается, это другой вопрос.

1
ответ дан Greg0 27 August 2018 в 11:06
поделиться

Синхронная операция выполняет свою работу перед возвратом вызывающему.

Асинхронная операция выполняет (большую часть или все) ее работу после возвращения вызывающему.

4
ответ дан HopefullyHelpful 27 August 2018 в 11:06
поделиться

При выполнении такой последовательности, как: a> b> c> d>, если мы получим отказ в середине выполнения, например:

a
b
c
fail

Затем мы начинаем с начала:

a
b
c
d

Это синхронно

Если, однако, мы выполняем одну и ту же последовательность: a> b> c> d>, и мы имеем провал в середине:

a
b
c
fail

... но вместо перезапуска с начала мы снова начинаем с точки отказа:

c
d

... это известно как асинхронное.

14
ответ дан Jerry Coffin 27 August 2018 в 11:06
поделиться

Синхронное выполнение означает, что выполнение происходит в одной серии. A->B->C->D. Если вы вызываете эти подпрограммы, A запустится, затем закончите, затем начнется B, затем закончите, затем запустится C и т. Д.

. При асинхронном выполнении вы начинаете процедуру , и пусть он запускается в фоновом режиме, когда вы начинаете свой следующий, а затем в какой-то момент скажите «подождите, пока это не закончится». Это больше похоже на:

Пуск A->B->C->D-> Подождите для A, чтобы закончить

. Преимущество состоит в том, что вы можете выполнить B, C и D, пока A все еще работает (в фоновом режиме, в отдельном потоке), чтобы вы могли лучше использовать свои ресурсы и иметь меньше «зависаний» или «ожидания», .

73
ответ дан Jimi 27 August 2018 в 11:06
поделиться

Вы вводите в заблуждение синхронный с Parallel vs Series. Синхронный означает все одновременно. Синхронизированное средство, связанное с каждым из них, которое может означать последовательно или с фиксированным интервалом. Пока программа делает все, она работает в серии. Получите словарь ... вот почему у нас есть несладкий чай. У вас есть чай или подслащенный чай.

8
ответ дан Joe 27 August 2018 в 11:06
поделиться

Просто сказано, что асинхронное выполнение выполняется в фоновом режиме.

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

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

18
ответ дан Michał Piaskowski 27 August 2018 в 11:06
поделиться

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

6
ответ дан Mike 27 August 2018 в 11:06
поделиться

Синхронный / асинхронный НЕ НУЖНО СДЕЛАТЬ С МНОЖЕСТВЕННОЙ РЕЗЬБОЙ.

Синхронный или Синхронизированный означает «подключен» или «зависит» каким-то образом. Другими словами, две синхронные задачи должны быть осведомлены друг о друге, и одна задача должна выполняться каким-то образом, которая зависит от другой, например, ждать до начала выполнения другой задачи. Асинхронный означает, что они полностью независимы и ни один из них не должен рассматривать другого каким-либо образом, либо в начале, либо в процессе исполнения.

Синхронный (один поток):

1 thread ->   |<---A---->||<----B---------->||<------C----->|

Синхронный (многопоточный):

thread A -> |<---A---->|   
                        \  
thread B ------------>   ->|<----B---------->|   
                                              \   
thread C ---------------------------------->   ->|<------C----->| 

Асинхронный (один поток):

         A-Start ------------------------------------------ A-End   
           | B-Start -----------------------------------------|--- B-End   
           |    |      C-Start ------------------- C-End      |      |   
           |    |       |                           |         |      |
           V    V       V                           V         V      V      
1 thread->|<-A-|<--B---|<-C-|-A-|-C-|--A--|-B-|--C-->|---A---->|--B-->| 

Асинхронный (многопотоковый):

 thread A ->     |<---A---->|
 thread B ----->     |<----B---------->| 
 thread C --------->     |<------C--------->|
  • Начальные и конечные точки задач A, B, C, представленные символами <, >.
  • Временные срезы процессора, представленные вертикальными полосками |

Технически концепция синхронного / асинхронного действительно не имеет ничего общего с потоками. Хотя, в общем, необычно найти асинхронные задачи, запущенные в одном потоке, это возможно (см. Ниже примеры), и common обнаруживает две или более задачи, выполняемые синхронно на отдельные потоки ... Нет, концепция синхронного / асинхронного действия должна выполнять только с тем, можно ли инициировать вторую или последующую задачу до того, как другая (первая) задача завершится , или он должен ждать. Вот и все. Какой поток (или потоки), или процессы, или процессоры, или действительно, какое аппаратное обеспечение, задача [s] выполняется, не имеет отношения к делу. Действительно, чтобы сделать это, я отредактировал графику, чтобы показать это.

ASYNCHRONOUS EXAMPLE. При решении многих технических проблем программное обеспечение предназначено для разделения общей проблемы на несколько отдельных задач и последующего выполнения их асинхронно. Хорошими примерами являются инвертирование матрицы или проблема анализа конечных элементов. В вычислениях примером является сортировка списка. Например, процедура быстрой сортировки разбивает список на два списка и сортирует каждый из них, вызывая его рекурсивно. В обоих приведенных выше примерах две задачи могут (и часто выполняются) выполняться асинхронно. Им не нужно быть на отдельных потоках. Даже машина с одним процессором и только один поток исполнения могут быть закодированы, чтобы инициировать обработку второй задачи до того, как первая завершится. Единственным критерием является то, что результаты одной задачи не нужны в качестве входных данных для другой задачи . До тех пор, пока время начала и окончания задач перекрывается (возможно только в том случае, если вывод не нужен в качестве входов для другого), они выполняются асинхронно, независимо от того, сколько потоков используется.

СИНХРОННЫЙ ПРИМЕР. Любой процесс, состоящий из нескольких задач, в которых задачи должны выполняться последовательно, но один должен быть выполнен на другом компьютере (выборка и / или обновление данных, получение котировки акций из финансовой службы и т. Д.). Если он находится на отдельной машине, он находится в отдельном потоке, будь то синхронно или асинхронно.

932
ответ дан NH. 27 August 2018 в 11:06
поделиться

Синхронный означает, что вызывающий абонент ожидает ответа или завершения, асинхронно, что вызывающий абонент продолжает и ответ приходит позже (если применимо).

В качестве примера:

    static void Main(string[] args)
    {
        Console.WriteLine("Before call");
        doSomething();
        Console.WriteLine("After call");
    }

    private static void doSomething()
    {
        Console.WriteLine("In call");
    }

Это всегда будет:

Before call
In call
After call

Но если мы должны сделать doSomething асинхронным (несколько способов сделать это), то выход может стать:

Before call
After call
In call

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

46
ответ дан Nick Orlando 27 August 2018 в 11:06
поделиться

Проще говоря:

SYNCHRONOUS

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

ASYNCHRONOUS

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

521
ответ дан Ryan 27 August 2018 в 11:06
поделиться

Я думаю, что хороший способ подумать об этом - это классический бег Relay Race

Synchronous: Процессы, подобные членам той же команды, они не будут выполняться до тех пор, пока они не получат эстафету (конец выполнения предыдущий процесс / бегун), и все же они все действуют синхронно друг с другом.

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

Имеет ли смысл?

1
ответ дан Sharif 27 August 2018 в 11:06
поделиться

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

Маленький пример:

Предположим, что воспроизведение аудио включает в себя три шага:

  1. Получение сжатой песни из жесткого диска
  2. Декомпрессия звука.
  3. Воспроизведение несжатого звука.

Если ваш аудиосигнал плеер делает шаг 1,2,3 последовательно для каждой песни, тогда он синхронный.

Если ваш аудиоплеер делает шаг 1,2,3 независимо друг от друга, тогда он будет асинхронным. то есть. Во время воспроизведения звука 1 (шаг 3), если он извлекает звук 3 из жесткого диска параллельно (шаг 1), и он разворачивает аудио 2 параллельно. (шаг 2). В итоге вы услышите песню, не дожидаясь многого, чтобы получить и распаковать.

30
ответ дан user207421 27 August 2018 в 11:06
поделиться

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

Single Threaded - Если у нас есть пара задач, над которыми нужно работать, и текущая система предоставляет только один поток , тогда задачи назначаются потоку один за другим. Его можно изобразить в виде

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

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

Single Threaded

Multi-Threaded

Подробнее здесь - https://codewala.net/2015/07/29/concurrency-vs-multi-threading-vs-asynchronous-programming-explained/

7
ответ дан yoAlex5 27 August 2018 в 11:06
поделиться

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

0
ответ дан סטנלי גרונן 27 August 2018 в 11:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: