Подтвердить что ты не робот

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

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

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

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

В любом случае, мой вопрос для вас таков: Как вы объясните условия гонки для нетехнической аудитории? Не смел ли объяснять планирование процессора? Не могли бы вы вызвать обеденных философов?

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

4b9b3361

Ответ 1

Компания X имеет 1000 долларов в банке. X платит арендную плату в размере 2000 долларов США и получает оплату в размере 10 000 долларов США за услуги, оказываемые компании Y. Однако из-за состояния гонки X имеет дефицит в размере 1000 долларов США и теперь подает заявку на банкротство. = (

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

Ответ 2

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

У меня на моем счете 500 долларов. Кто-то переводит мне $200 одновременно с тем, что я снимаю 50 долларов.

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

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

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

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

Ответ 3

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

Если вы захватите пример столового философа или сделаете свой собственный, определенно используйте метафору.

Ответ 4

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

Собирались играть в игру под названием Игра Pen. Правила просты: Im собираюсь держать ручку в руке и Затем я скажу: "Один, два, три, иди". Когда я говорю "иди", возьмите перо из моего рука. Тот, кто получает ручку, выигрывает. Готов? Один, два, три, идите.

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

Ответ 5

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

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

Теперь, картинка пик-час трафика в том же месте. Скажем, что один автомобиль, проезжающий на юг по Уэст-стрит, не может пройти весь путь через перекресток в северо-западном углу нашего городского квартала. Этот автомобиль теперь блокирует все перекрестное движение Westbound на северном проспекте. Незадолго до того, как автомобиль Westbound попытается пройти через пересечение углов NorthEast и застревает, блокируя весь трафик Northbound на восточной улице. Когда эта ситуация делает все вокруг четырех перекрестков, никакие автомобили не могут двигаться! Каждый ждет машин перед ним, чтобы двигаться вперед, но нет никакого способа, чтобы тупик был освобожден, не вытаскивая автомобили назад.

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

Ответ 6

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

  • Ждите зарплаты.
  • Перейти в магазин.
  • Покупайте еду.
  • Включите пластину.
  • Положите пищу на тарелку.
  • Держите пластину в течение 20 минут.
  • Eat.
  • Идите спать.

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

  • Вы: Ждите зарплаты.
  • Жена: идите в магазин без денег, сбой

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

  • Вы: Держите тарелку в течение 20 минут.
  • Вы: ложитесь спать.

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

    Жена: Ложись.

Ответ 7

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

Состояние гонки - это буквально гонка между двумя людьми.

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

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

Ответ 8

Питер хочет вырваться из подъездной дороги. Он проверяет, что на его машине нет ничего, а затем садится. Его сын Фрэнк прячется за машиной. Питер не может его увидеть и убегает.

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

Ответ 9

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

Ответ 10

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

Ответ 11

Вот отличный пример в Структурированное параллельное программирование с использованием операционных систем (как я помню)

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

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

Вот план.

  • Поместите большую миску на стыке.

  • Дайте каждому инженеру немного латунной обезьяны.

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

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

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

Угадайте, что?

У них еще были столкновения!

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


Это условие гонки.

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

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

Ответ 12

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

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

Ответ 13

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

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

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

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

Ответ 14

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

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

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

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

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

Ответ 15

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

В этой истории не рассматривается концепция тупика, но более традиционный сценарий гонки и последствия.

ИСТОРИЯ НАЧАЛА ЗДЕСЬ:

Настройки: Есть 3 города, соединенные железнодорожной сетью. Поезда не имеют никаких указаний на них, указывающих, из какого города они прибывают, и из какого города они собираются, потому что они используются между всеми тремя городами и железнодорожной сетью, не хотели иметь дело с хлопотами смены знаков время. Поскольку сеть мала, нет конкретного графика, когда поезда прибывают и уходят. Наблюдатели станции просто получают вызов от других надзирателей городской станции, когда поезд отправляется, надсмотрщик принимает к сведению то время, когда он ушел, и поскольку все поезда - это те же модели, что и они, они движутся с одинаковой скоростью, поэтому, когда надсмотрщик получает звонок из других городов, которые они объявляют людям на станции, что: "Следующий поезд будет направляться в город С". Таким образом, люди, которые хотят путешествовать в город C, ждут поезд, прыгают и весело катаются в городе C.

Проблема: Но однажды, когда поезд планировал свой маршрут от А до Б до С, он сломался на полпути между А и Б. К счастью, специалисты очень опытные и быть в состоянии восстановить поезд в течение короткого времени. Однако в тот же день другой поезд также планировал другой маршрут от C до B до A. Наблюдатель на станции B получил звонок от A, в котором прибыл поезд, и вскоре после того, как получил еще один звонок от C, прибыл еще один поезд. Затем надзиратель станции объявил пассажирам, ожидающим на вокзале: "Первый прибывший поезд будет направляться на станцию ​​C, а вскоре после поезда после этого направится к станции А.". Когда пассажиры собрали свой багаж и пошли на свои платформы. Наблюдатель увидел поезд и направил рельсы к платформе, где люди планировали отправиться в город. Маленькие знали, что поезд фактически отправляется в город А. Другой поезд после того, как он исправил свои "механические проблемы", также прибыл на станцию, и надзиратель с радостью направил его на платформу с пассажирами, желающими отправиться в город А. Разумеется, ни один из пассажиров не прибыл туда, где они планировали, все потому, что надзиратель предположил, что они прибудут как обычно.

Ответ 16

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

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

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

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

Вы можете себе представить, что такая ситуация возникает в стеке 1:

player 1 grabs a red block
player 1 places red block         - player 2 grabs an orange block
player 1 grabs an orange block    - player 2 places an orange block
player 1 places an orange block

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

Также вы можете показать им это видео: https://www.youtube.com/watch?v=TcGwNdbsAbc

Ответ 17

Позвольте использовать доску для выполнения тривиальной задачи учета. У нас $100 на руках - напишите это на доске.

У Алисы есть десятки счетов-фактур, которые составляют до 100 долларов, поэтому она собирается отметить, что 100 долларов США, перейдите и добавьте свой список и вернитесь через 5 минут и напишите 200 долларов на доске.

Боб был шоппинг. Он собирается взять этот номер с доски и пойти и вычесть 50 долларов за покупки, а затем он собирается написать 50 долларов на доске.

Если Боб вернется первым, мы увидим 200 долларов после того, как Алиса напишет свой результат. Если Алиса вернется первым, мы увидим 50 долларов, также неправильно. То, что мы хотим увидеть, составляет 150 долларов США, и нам нужно добавить некоторые меры предосторожности, чтобы это произошло.

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

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

Ответ 18

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

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

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

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