git-flow для нескольких промежуточных / производственных сред

Передайте: Когда в этом сообщении говорятся просто "сопрограммы", я обращаюсь к понятие сопрограммы, не определенный C++ 20 функций. При разговоре об этой функции я назову его" co_await" или "co_await сопрограммы".

На динамическом выделении

Cppreference иногда использует более свободную терминологию, чем стандарт. co_await, поскольку функция "требует" динамического выделения; прибывает ли это выделение из "кучи" или из статического блока памяти или независимо от того, что вопрос для поставщика выделения. Такие выделения могут игнорироваться при произвольных обстоятельствах, но так как стандарт не обстоятельно объясняет их, все еще необходимо предположить, что любая co_await сопрограмма может динамично выделить память.

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

co_await, поскольку функция хорошо разработана к [1 123], удаляют многословие из точки использования для любого co_await - способные объекты и функциональность. co_await оборудование является невероятно сложным и сложным с большим количеством взаимодействий между объектами нескольких типов. Но в приостановить/возобновить точке, это всегда похоже co_await . Добавление поддержки средства выделения Вашим awaitable объектам и обещаниям требует некоторого многословия, но то многословие живет за пределами места, где те вещи привыкают.

Используя alloca для сопрограммы было бы... очень несоответствующим для [1 125] большинство использование co_await. В то время как дискуссия по поводу этой функции пытается скрыть его, факт вопроса - то, что co_await, поскольку функция разработана для асинхронного использования. Это - его намеченная цель: остановить выполнение функции и запланировать возобновление той функции на потенциально другой поток, затем пася любое в конечном счете сгенерированное значение к некоторому коду получения, который может быть несколько удален от кода, который вызвал сопрограмму.

alloca не подходит для того конкретного варианта использования, так как вызывающая сторона сопрограммы позволяется/поощряется для движения, делают что так, чтобы значение могло быть сгенерировано некоторым другим потоком. Место, выделенное [1 110], поэтому больше не существовало бы, и это довольно плохо для сопрограммы, которая живет в нем.

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

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

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

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

В этом случае, alloca - базирующееся выделение было бы соответствующим.

, Как это вошло в стандарт

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

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

Помнят , что произошло, прошлый раз "звуки, реализуемые", использовался в качестве основания для принятия функции.

Вы не хотите стандартизировать что-то, если Вы не знаете, что это может быть реализовано. И Вы не хотите к standadize что-то, если Вы не знаете, решает ли он на самом деле намеченную проблему.

Gor Nishanov и его команда в Microsoft вставляют работу для реализации co_await. Они сделали это для [1 131] годы , совершенствовав их реализацию и т.п.. Другие люди использовали свою реализацию в фактическом производственном коде и казались довольно удовлетворенными его функциональностью. Лязг даже реализовал его. Так же, как мне лично не нравится он, это бесспорно, что co_await зрелы функция.

, В отличие от этого, "базовые сопрограммы" альтернативы, которые были подняты год назад, поскольку конкурирующим идеям с [1 116] не удалось нарастить обороты частично, потому что их было трудно реализовать . Вот почему co_await был принят: потому что это был доказанный, старый, и звуковой инструмент, что люди хотели и имели продемонстрированную способность улучшить их код.

co_await не для всех. Лично, я не буду, вероятно, использовать его очень, поскольку волокна работают намного лучше на мои варианты использования. Но это очень хорошо для своего определенного варианта использования:-и приостановка.

6
задан Cascabel 20 February 2011 в 02:47
поделиться

1 ответ

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

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

пикосекунда: если Вы используете пакет сценариев потока мерзавца, то необходимо забыть о тех и сделать это собой (не является настолько трудным)

0
ответ дан 18 December 2019 в 04:38
поделиться
Другие вопросы по тегам:

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