1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/jd-platform-opensource-asyncTool

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.en.md

Описание фреймворка для параллельной обработки

Если у вас есть вопросы, вы можете отправить электронное письмо автору или предоставить конкретные требования к сценарию. Спасибо за ваши комментарии. wuweifeng10@jd.com

Если вас интересует блокчейн, обратитесь к другому проекту GVP автора — введение в низкоуровневый блокчейн на Java (https://gitee.com/tianalei/md_blockchain).

Если вам нужно просто использовать этот фреймворк, пожалуйста, посмотрите ниже. Если вам необходимо глубоко понять, как этот фреймворк реализован шаг за шагом, от получения требований до обдумывания каждого шага, почему каждый класс спроектирован именно так, почему существуют эти методы, то есть как разработать этот фреймворк с нуля, я открыл колонку в CSDN (https://blog.csdn.net/tianaleixiaowu/category_. HTML), чтобы рассказать о том, как разрабатывается промежуточное ПО с нуля, включая и не ограничиваясь этим небольшим фреймворком. Внутренние коллеги JD могут поискать мою ERP на CF и посмотреть её.

Что предстоит сделать

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

Общие сценарии параллельной работы

  1. Клиент запрашивает интерфейс сервера, который должен вызывать интерфейсы других n микросервисов. Например, чтобы запросить мой заказ, вам нужно вызвать RPC пользователя, RPC деталей продукта, RPC инвентаризации, купоны и многие другие службы. В то же время эти службы также имеют взаимозависимость, например, сначала необходимо получить поле пользователя, а затем перейти к службе RPC для запроса данных. После того как все результаты будут окончательно получены или произойдёт тайм-аут, результат будет обобщён и возвращён клиенту.
  2. Многие задачи в виде рабочего процесса.
  3. Рептилии и т. д. Они зависят друг от друга.

Возможные требования для сценариев параллельной работы — произвольное расположение

  1. Последовательный запрос нескольких исполнительных блоков. ! [enter picture description] (https://images.gitee.com/uploads/images/2019/1226/092905. PNG "screenshot. PNG")
  2. Параллельные запросы нескольких исполнительных блоков. ! [enter picture description] (https://images.gitee.com/uploads/images/2019/1226/092925 c01a5_. PNG "screenshot. PNG")
  3. Блокировка ожидания, последовательное выполнение нескольких параллельных операций. ! [enter picture description] (https://images.gitee.com/uploads/images/2019/1226/092935 "[5babe488" [303698. PNG "screenshot. PNG")
  4. Блокировка ожидания, выполнение определённого блока после выполнения нескольких параллельных блоков. ! [enter picture description] (https://images.gitee.com/uploads/images/2019/1226/092952. PNG "screenshot. PNG")
  5. Последовательная параллельная взаимозависимость. ! [enter picture description] (https://images.gitee.com/uploads/images/2019/1226/093006 cd133c. PNG "screenshot. PNG")
  6. Сложный сценарий. ! [enter picture description] (https://images.gitee.com/uploads/images/2019/1226/093023 "screenshot. PNG")

Возможные требования для сценариев параллельной работы — обратные вызовы для каждого результата выполнения Традиционные future и completeablefuture могут в некоторой степени выполнять хореографию задач и передавать результаты следующей задаче. Например, completabilefuture имеет метод then, но он не может выполнять обратный вызов для каждого исполнительного блока. Например, если выполнение a прошло успешно, за ним следует B, я надеюсь, что a будет иметь обратный вызов после выполнения, чтобы я мог отслеживать текущий статус выполнения или регистрировать что-то. В случае неудачи я также могу записать информацию об исключении или что-то ещё. На данный момент традиционные методы ничего не могут сделать. Мой фреймворк предоставляет такую функцию обратного вызова. Кроме того, если выполнение завершается неудачно или истекает время ожидания, при определении исполнительного блока можно установить значение по умолчанию.

Возможные требования сценариев параллельной работы — сильная и слабая зависимость от порядка выполнения Как показано на рисунке 3, a и B выполняются одновременно, и... Наконец, C.

В некоторых сценариях мы хотим выполнить C только после того, как a и B завершат выполнение. Существует метод allow (futures...). Then () в completable future.

В других сценариях мы хотим, чтобы либо a, либо B завершили выполнение, а затем выполнили C. Существует метод anyof (futures...). Then() в completable future.

Мой фреймворк также предоставляет аналогичные функции. При установке зависимости adddepend в оболочке можно указать, должна ли зависимая задача быть выполнена. Если вы полагаетесь на выполнение must, вы должны дождаться завершения всех зависимостей must перед выполнением себя.

Если вы не полагаетесь на must, то можете выполнить любую зависимость, а затем выполнить себя.

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

Например, для трёх блоков выполнения a-b-c входной параметр a — строка, а выходной параметр — int. Для B необходимо использовать результат a в качестве входного параметра. Другими словами, a и B не являются независимыми, но зависят от результата.

Прежде чем a завершит выполнение, B не может получить результат. Он просто знает тип результата A.

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

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

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

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/jd-platform-opensource-asyncTool.git
git@api.gitlife.ru:oschina-mirror/jd-platform-opensource-asyncTool.git
oschina-mirror
jd-platform-opensource-asyncTool
jd-platform-opensource-asyncTool
master