Как бы вы объяснили многопоточность семилетнему ребенку?

21

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

Если бы вас попросили описать это, как бы вы это сделали?

Винот Кумар
источник
55
Я спросил бы интервьюера, планирует ли он / она нанять 7-летних детей.
Крейг,
14
Я бы ударил Интервьюера в лицо.
дебилы
11
Вероятно, нужно проверить, что вы достаточно хорошо знаете предмет, чтобы научить его тому, кто абсолютно не знает предмета.
FrustratedWithFormsDesigner
6
@ Morons Во-первых, это немного жестоко. Во-вторых, ваши слова пишутся с большой буквы из-за какого-то особого значения?
Николь
11
@FrustratedWithFormsDesigner Ну, чертовски глупо. Можете ли вы объяснить комплексные числа тому, кто не умеет считать? Нет? Вы мусор на сложные числа тогда.
biziclop

Ответы:

35

Опишите, что это такое, просто опустите технические термины, за исключением определений:

  1. У вас есть пять заданий. Вы должны начать работать над всеми из них прямо сейчас.
  2. Каждая работа - это тема.
  3. Вы процессор.
  4. Потратьте немного времени на каждую работу, а затем переходите к следующей, стараясь уделить внимание всем из них.
  5. Если у вас больше людей, работу может выполнять только один человек за раз.
  6. Поскольку каждый человек может работать на другой работе, больше людей могут выполнять всю работу быстрее, если у вас более одной работы.
Николь
источник
15
Я думаю, что единственное, что я хотел бы добавить, - это, может быть, поменять «работу» на «игры», поиграть с игрушками, сделать домашние дела или выполнить домашнюю работу.
Бетлакшми
Затем, если у вас есть «процессор», «ведущий заметки», когда они работают над заданием, вы можете объяснить кэш и когерентность кэша в многопроцессорном окружении
Стивен Эверс
Хорошее описание, но зная 7 лет, это не будет летать.
красная грязь
@el термоблока Я нахожусь 7 - летний! или, по крайней мере, я слышу 1 хахахахахаха
Матин Улхак
@bethlakshmi, вы предполагаете, что в 7 лет большинство детей все еще играют в игры и еще не вышли и не получили продуктивную работу? подойди!
анонимный тип
22

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

Адам Кроссленд
источник
1
Это периферия вашего мозга, способная действовать относительно независимо. Это (почти) как твой мозг, использующий DMA.
Ник Т
@nick T, больше похоже на облачные вычисления без доступа к компонентам только из исходного кода. Даже человек, жующий жвачку, понятия не имеет, как они на самом деле выполняют действие.
анонимный тип
@ Нет, твое последнее утверждение, кажется, подтверждает мою периферийную аналогию. Периферийные устройства делают вещи без процессора, копаясь в мелочах, просто делегируя его. Я думаю, вы могли бы также сказать, что это похоже на облачные вычисления, но это в гораздо большем масштабе; DMA и периферия довольно низкого уровня.
Ник Т
действительно? Я бы подумал, что для игры в покемонов (решение проблем более высокого порядка) определенно потребуется память пользовательского режима и использование языка программирования более высокого уровня, но, возможно, что-то вроде жевания может быть DMA.
анонимный тип
10

Свяжите это с тем, что они могут легко понять. Авто на дороге.

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

Но благодаря многопоточности все эти машины едут по широкой дороге с четырьмя полосами движения. Более быстрые машины могут проехать мимо более медленных.

Изменить: и, если они не будут осторожны, они могут врезаться друг в друга ...

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

Я бы объяснил это как стирку.

У вас есть 3 загрузки белья, одна стиральная машина и одна сушилка.

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

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

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

Tyanna
источник
2
Кроме того, вы не можете сушить белье до тех пор, пока загрузка не пройдет через стиральную машину, поэтому вы также можете описать блокировку
zzzzBov
Я чуть не дал вам +1, но потом понял, что ни один ребенок в здравом уме не последует этому объяснению. Для начала вы использовали что-то чрезвычайно скучное (с точки зрения детей, а не мое), что является рутиной. Как только вы произнесете слово «прачечная», их ум отключится, они буквально услышат только первые 7 слов.
анонимный тип
6

Готовим еду с несколькими блюдами на маленькой плите. У вас есть две горелки (то есть процессоры или ядра) и четыре блюда (нити) для приготовления. Таким образом, одновременно можно приготовить не более двух блюд. Разные блюда имеют разное время приготовления. Повар (ОС) должен все это передергивать, чтобы все готовилось ко времени ужина.

tcrosley
источник
3

Цирковой жонглер, начинающий с двух шаров и постепенно добавляющий все больше и больше шаров в свой акт.

Юрий Зубарев
источник
Это лучший ответ, потому что он отвечает на вопрос с точки зрения 7-летнего ребенка, а не 30-летнего программиста.
анонимный тип
2

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

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

user1249
источник
2

«Мне нужно, чтобы вы принесли два стакана с кухни на стол . (Они бегут, держа в руках стакан по каждой руке). Теперь, пожалуйста, сделайте это снова, но только одной рукой».

JK
источник
2

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

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

В целом, я думаю, что ударить интервьюера по лицу - лучший ответ.

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

Многопоточность, это все равно что делать много вещей одновременно и делать их понемногу.

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

Ну, вы не можете этого сделать, потому что, если вы не будете есть, вы проголодаетесь, независимо от того, сколько вы получили во время предыдущей еды. Если вы не спите, вы устанете и не сможете играть с друзьями. Понял? Есть несколько вещей, которые нужно сделать, но мы не можем сделать их сразу. Мы завтракаем, играем в игры, обедаем, снова играем в игры ... и, наконец, говорим "спокойной ночи".

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

Хонг Лонг
источник
1

У вас есть набор из 6 задач, которые вы должны сделать:

  • Делай свою домашнюю работу
  • убери свою комнату
  • делать покупки
  • собирать яблоки в саду
  • помой посуду
  • подмести крыльцо

Каждое задание занимает 1 час. У тебя есть 2 брата.

  • Если вы не используете многозадачность, это означает, что вы должны сделать всю работу самостоятельно. Это займет у вас 6 часов (если вы начнете в 12:00, все задачи будут выполнены в 18:00).
  • Если вы используете многозадачность, это означает, что вы можете дать некоторые задания своим братьям. Если вы все начнете работать одновременно, вы закончите все задачи раньше. В этом случае все 3 из вас выполнят 2 задачи, каждая из которых займет 2 часа (если вы все начнете в 12:00, все задачи будут выполнены в 14:00!).
user19248
источник
0

У вас есть один джойстик / игровой контроллер.

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

Пока каждый ребенок играет, он также ест из пакета фишек, из которого разрешено есть только текущему игроку.

* Тогда игра вылетает. ;)


"Почему бы вам не купить еще 3 контроллера?"

Ну, это несколько процессоров!

оборота мунту
источник
0

Арт класс (Многопоточное приложение)

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

Учитель назначает всем ученикам на день, чтобы начать рисовать (инициализация потока и назначение).

Поскольку в школе так много красок, всем придется делиться цветами друг с другом (краски представляют память).

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

В конце урока учитель отклоняет урок (присоединение потока).


Gaming (многопроцессное приложение)

Игра в карточную игру с друзьями (или эквивалентную игру с предметами коллекционирования):

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

Все собираются вместе, чтобы играть в игры (многопроцессные или многослойные приложения).

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

Если вы действительно хороши, вы можете вступить в клуб:

Лидер (исполнительная программа) Члены (подпрограммы)

Если клуб становится действительно хорошим, они могут придумать особый способ (API) общаться друг с другом, чтобы помочь лучше выработать стратегию.


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

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


Заметка:

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

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

В сторону:

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

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

Эван Плейс
источник
-1

Используйте широко принятую модель: столовые философы.

5 философов едят их пасту ужин.

5 вилок доступны вокруг стола.

Каждому философу нужны две вилки.

Некоторые едят. Некоторые философствуют в ожидании.

С. Лотт
источник
2
Философы едят с двумя вилками? Чувак, они даже страннее, чем я думал! : P Эта история имеет больше смысла с палочками для еды вместо вилок ...
FrustratedWithFormsDesigner
4
@ Разочарован, поэтому им нужно так много думать.
Я не думаю, что замена палочек для еды вилками работает хорошо. :)
Тианна
4
Мне больше нравится аналогия с палочками. Вам определенно нужны две палочки для еды. Вам не нужны две вилки. На самом деле проблема с вилками путает проблему. Тем более что разветвление - это ключевой термин в многопроцессорности.
Пол Сасик
... а потом ты застрял, объясняя, что такое философ. И, конечно, они спросят, зачем им две вилки (что довольно глупо с точки зрения 7-летнего возраста) и почему кто-то может подождать перед едой!
анонимный тип
-1

Предположим, вы (ребенок) подпрыгиваете мячом на голове. После каждого отскока вы подсчитываете его, т. Е. Количество отскоков. Также после каждого отскока вы произносите буквы алфавита (A, B, C, ...)

Малыш, ты многопоточен.

Donotalo
источник
-1

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

Ян
источник
-2

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

Maxpm
источник
"Но почему это не делает и то и другое одновременно?"
Матин Улхак
-2

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

Была ли часть должностной инструкции отчитываться перед финансовым директором?

JQA
источник
-3

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

hotpaw2
источник