Гарантийный заказ на печать после параллелизма - PullRequest
1 голос
/ 13 января 2020

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

Object {
   Data data
   int order
}

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

Могу ли я выполнить работу параллельно и гарантировать заказ на печать? Есть ли известный термин для моей проблемы? Другие сталкивались с этим раньше?

Ответы [ 2 ]

1 голос
/ 13 января 2020

Можно ли как-нибудь параллельно выполнить работу и гарантировать порядок печати?

Нет необходимости говорить, что мы разрабатываем параллельные подпрограммы с упором на эффективность, но не ограничивая порядок расчетов. Распечатка результатов в конце, когда все будет сделано, должна диктовать порядок. Фактически, параллельные подпрограммы часто выполняют вычисления таким образом, что они явно не в порядке (например, для каждого потока) минимизировать поток и накладные расходы на синхронизацию.

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

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

1 голос
/ 13 января 2020

Q : Есть ли известный термин для моей проблемы?

Да ,
есть.
A con · tra · dic ·tion | [ˌkän-trə-ˈdik-shən]

Определение противоречия
… *
2a: суждение, утверждение или фраза, которая утверждает или подразумевает как истинность, так и ложность чего-либо
//… обе части противоречия не могут быть истинными…
- Томас Гоббс
2b: утверждение или фраза, части которой противоречат друг другу
// круглый квадрат является противоречием в терминах
3a: логическое несоответствие
3b: ситуация, в которой присуще факторы, действия или предложения противоречивы или противоречат друг другу

источник: Merriam-Webster

Информатика , позаимствовав термины { PARALLEL | SERIAL | CONCURRENT } из теории систем, учитывает отличительные (и никогда не пересекающиеся) свойства каждого такого класса операций, где:

[PARALLEL] оркестровка единиц работы подразумевает, что любая работа -блок: a) запускается и b) исполняется и c) завершается одновременно , т.е. все попадают в / из [PARALLEL] -секций одновременно и будучи разработано в одно и то же время, а не иначе.

[SERIAL] оркестровка единиц работы подразумевает, что все рабочие единицы должны обрабатываться в одном, stati c, известный, определенный порядок, начиная рабочие единицы в таком порядке, просто (известный) один после того, как предыдущий закончил свою работу - то есть один за другим , не иначе.

[CONCURRENT] оркестровка разрешений единиц работы позволяет запускать более одной единицы работы, если позволяют ресурсы и условия системы (выполняются приоритеты планировщика), что приводит к неизвестному порядку выполнение и неизвестное время завершения, так как и первое, и второе зависят от неизвестных внешних факторов (системных условий и (не) -наготовленности ресурсов, которые / wi понадобится для разработки конкретного рабочего блока)


Принимая во внимание, что существует a-priori известный, встроенный смысл ORDER в [SERIAL] -тип обработки (так как он уже был предварительно подключен к коду обработки-оркестрации единиц работы), он не имеет такого значения ни в [CONCURRENT], где случайное планирование c делает желаемый иметь порядок неопределенным случайным результатом из состояний системы, искаженным совпадением всех других внешних факторов, и тем же желаемым иметь порядок в основном единственное значение в истинном [PARALLEL] по определению, так как все запускаются / исполняются / заканчиваются sh в одно и то же время - поэтому все единицы работы, выполняемые в стиле [PARALLEL], не имеют другого шанса, кроме как быть и 1-м, и последним одновременно .

Q : Есть ли любой способ Я мог бы работать параллельно и гарантировать ее порядок печати ?

Нет ,
, если вы не умышленно или неосознанно нарушаете правила оркестровки [PARALLEL] и не вводите повторно [SERIAL] -isiser logi c в рабочие блоки, чтобы принудительно принудительно применять любое такое желаемое упорядочение, которое не известно, тем менее естественным для первоначально [PARALLEL] оркестровки рабочих блоков (как это принято в python - с использованием индолинированного степпинга GIL-монополиста - в качестве примера такого шага)

Q : Встречались ли другие с этим раньше?

Да .
С 2011 года каждый семестр этот или аналогично постулированные вопросы снова появляются здесь, на StackOverflow с растущими суммами г / г .

...