Объяснение условий состязания нетехнической [закрытой] аудитории

У меня были похожие мысли (особенно когда я использовал строковые поля поддержки для BLOB-объектов JSON). Вы можете использовать анонимные типы для ограничения возвращаемых данных.

Как в этом примере ( https://docs.microsoft.com/en-us/ef/core/querying/client-eval )

var blogs = context.Blogs
    .OrderByDescending(blog => blog.Rating)
    .Select(blog => new
    {
        Id = blog.BlogId,
        Url = StandardizeUrl(blog.Url)
    })
    .ToList();

EF Core 2.1 также представил типы запросов , которые могут помочь сделать отношения между объектами вашего представления и моделью БД более ясными.

20
задан Joel Wietelmann 21 November 2008 в 21:39
поделиться

15 ответов

Компания X имеет 1 000$ в банке. X платежей арендная плата 2 000$ и полученный оплата 10 000$ для сервисов представили к компании Y. Однако из-за состояния состязания, X находится в дефиците 1 000$ и теперь запрашивает банкротство. = (

Вы могли бы хотеть объяснить, как банк обрабатывает учетную запись компании X таким образом: Персонал банка A принимает текущее значение 1 000$ и добавляет 10 000$ к нему. Персонал банка B принимает текущее значение 1 000$ и вычитает 2 000$ из него. Персонал банка обновления значение к 11 000$. Персонал банка B обновляет значение к - 1 000$.

21
ответ дан 29 November 2019 в 23:45
поделиться

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

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

Теперь, трафик часа пик изображения в том же местоположении. Скажем, тот один автомобиль ведущий Юг на Западной улице не может сделать все это путем через пересечение в углу NorthWest нашего городского квартала. Тот автомобиль теперь блоки все Движущееся на запад перекрестное движение на Северной авеню. Это не занимает много времени, прежде чем Движущийся на запад автомобиль пытается сделать его через угловое пересечение NorthEast и застревает, блокируя все Движущееся на север движение на Восточной улице. Когда эта ситуация делает все это путем вокруг этих четырех пересечений, никакие автомобили не могут переместиться! Каждый ожидает автомобилей перед ним для продвижений вперед, но нет никакого пути к затору, который будет уменьшен, не вытаскивая автомобили назад.

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

2
ответ дан 29 November 2019 в 23:45
поделиться

Запишите программу:

  1. Ожидают зарплаты.
  2. Идут для покупок.
  3. Покупают еду.
  4. Включают пластину.
  5. Помещенная еда на пластине.
  6. Сохраняют пластину в течение 20 минут.
  7. Едят.
  8. Ложатся спать.

Теперь попытка иметь два потока (Вы, жена) выполняют его без синхронизации.

  • Вы: Ожидайте зарплаты.
  • Жена: Перейдите к магазину без денег, катастрофический отказ

  • Вы: Включите пластину.

  • Вы: Сохраните пластину в течение 20 минут.
  • Вы: Лечь спать.

  • Жена: Поешьте в чужом месте.

  • Жена: Лечь спать.
2
ответ дан 29 November 2019 в 23:45
поделиться

Если Вы запишете в не техническую аудиторию, то Вы захотите упростить свои объяснения и связать ее с чем-то, что они могут понять. Одно объяснение, взятое от бумажных Аналогий для обучения параллельных вычислений неопытным программистам ( http://portal.acm.org/citation.cfm?doid=1189136.1189172 ), объясняет это с точки зрения перьевой игры:

We’re, собирающийся играть в игру, названную Перьевой Игрой. Правила просты: I’m, собирающийся содержать перо в моей руке, и затем, I’ll говорят, что “One, два, три, идут. ”, Когда я говорю, что “go, ” берут перо от моей руки. Кто бы ни получает перьевые победы. Готовый? Один, два, три, идут.

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

2
ответ дан 29 November 2019 в 23:45
поделиться

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

, Угоняете ли Вы пример обеденного философа или составляете Ваше собственное, определенно используют метафору.

2
ответ дан 29 November 2019 в 23:45
поделиться

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

у меня есть 500$ на моей учетной записи. Кто-то передает 200$ мне в то же самое время, когда я забираю 50$.

Теперь, если банк не обрабатывает условия состязания правильно, они сделают следующее (предполагающий, что транзакции обрабатываются вручную, конечно), клерк A будет видеть запрос, чтобы добавить 200$ к моему балансу и отметить, что мой баланс в настоящее время - 500$. Клерк B будет видеть запрос, чтобы вычесть 50$ из моего баланса и отметить, что мой баланс составляет в настоящее время 500$ (клерк A еще не передал деньги).

Служат концы документы, и устанавливает мой остаток на счете на 700$ (500 + 200, которые он, как предполагалось, добавил). И затем, минуту спустя (потому что клерк B просто должен был захватить чашку кофе), клерк B заканчивает другую транзакцию и устанавливает мой баланс на 450$ (500, которые я имел, когда он проверил, минус 50 он был предназначен для вычитания).

Мой баланс - теперь 450$, когда это должны были быть 650$ из-за состояния состязания. Результат зависел от порядка, в котором были выполнены различные части этих двух транзакций.

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

10
ответ дан 29 November 2019 в 23:45
поделиться

Отправьте их в Состояние состязания на Википедию.

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

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

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

-1
ответ дан 29 November 2019 в 23:45
поделиться

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

Как простой пример, давайте использовать пересечение с 4 путями (набор в стране, где Вы управляете справа). Разделите пересечение на 4 квадранта: северо-запад, Северо-восток, Юго-восток и Юго-запад. Теперь назовите каждый квадрант ресурсом и назовите каждый автомобиль потоком выполнения. Эти автомобили только уважают системы трафика, и так как нет никаких знаков Стоп или светофора на этом пересечении, автомобильный баррель прямо на через, не замедляясь или рассматривая трафик.

можно легко показать, что одновременное использование одного из этих квадрантов больше чем одним автомобилем плохо, и приводит к автокатастрофе. Одно очевидное решение состоит в том, чтобы установить систему трафика. Система гарантирует, что не больше, чем один автомобиль проходит через квадрант одновременно. Это может сделать это запутанно, не связывая все ресурсы. Например, разрешение автомобилям, прибывающим с Юга, делает левый поворот направиться на запад (использование юго-восточных и северо-западных квадрантов), в то время как разрешение автомобилям, прибывающим с Запада, делает правый поворот направиться на юг (использование юго-западного квадранта). Система трафика обеспечивает взаимное исключение или предотвращает одновременное использование (несколькими автомобилями) общего ресурса (квадрант дороги в пересечении).

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

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

0
ответ дан 29 November 2019 в 23:45
поделиться

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

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

, если оба потока получают interuupted после: баланс загрузки; и затем резюме, можно потерять один доллар.

см.: http://wasp.cs.washington.edu/atomeclipse/handouts.pdf

0
ответ дан 29 November 2019 в 23:45
поделиться

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

1
ответ дан 29 November 2019 в 23:45
поделиться

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

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

0
ответ дан 29 November 2019 в 23:45
поделиться

Существует яркий пример в Структурированное Параллельное Программирование С Приложениями Операционных систем (как я вспоминаю)

В обедневшей стране Bezerkistan, двух слияниях строк на одноколейный путь в туннеле. Были коллизии, и управляющей хунте нужно решение.

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

Вот план.

  1. Помещенный большая миска в соединение.

  2. Дают каждому инженеру, немного чертовски холодному.

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

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

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

Предположение, что?

у Них все еще были коллизии!

, Почему? Каковы ситуация или последовательность действий, которая заставляет это перестать работать?

<час>

Это - состояние состязания.

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

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

0
ответ дан 29 November 2019 в 23:45
поделиться

Peter хочет выйти из своей подъездной дороги. Он проверяет, что ничто не находится в способе его автомобиля, затем входит. Его сын Frank затем скрывается позади автомобиля. Peter не видит его, и работает на основе его.

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

1
ответ дан 29 November 2019 в 23:45
поделиться

Как насчет очевидной плоскости?

состояние состязания А является буквально гонкой между двумя людьми.

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

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

1
ответ дан 29 November 2019 в 23:45
поделиться

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

1
ответ дан 29 November 2019 в 23:45
поделиться
Другие вопросы по тегам:

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