Арт класс (Многопоточное приложение)
Поскольку без учителя не может быть занятий, вам нужен учитель (основная тема). Когда вы попадаете в класс, вы садитесь, и учитель отвечает за всех и назначает класс для рисования картинок на весь день.
Учитель назначает всем ученикам на день, чтобы начать рисовать (инициализация потока и назначение).
Поскольку в школе так много красок, всем придется делиться цветами друг с другом (краски представляют память).
Допустим, вы рисуете дракона и хотите дать ему сумасшедшие красные глаза, но кто-то другой использует красную краску. Вы не можете просто пойти и взять краску для себя, потому что тогда никто другой не сможет ее использовать. Вместо этого вы вежливо просите поделиться (блокировка ресурсов) краской. Вы используете немного, а затем передать его. Возможно, вам придется немного подождать, чтобы вернуть его, но это позволяет всем, кто в этом нуждается, получить немного без покрасочного боя (условия гонки).
В конце урока учитель отклоняет урок (присоединение потока).
Gaming (многопроцессное приложение)
Игра в карточную игру с друзьями (или эквивалентную игру с предметами коллекционирования):
Допустим, вы встречаетесь со своими друзьями (процессами) после школы. Вокруг нет учителей, и никто не скажет вам, что делать.
Все собираются вместе, чтобы играть в игры (многопроцессные или многослойные приложения).
Вы серьезно думаете о том, как вы можете использовать свои карты, чтобы побить своих оппонентов (внутренняя обработка), и вы пытаетесь поделиться идеями со своим партнером, когда у вас появляется идея (передача сообщений).
Если вы действительно хороши, вы можете вступить в клуб:
Лидер (исполнительная программа) Члены (подпрограммы)
Если клуб становится действительно хорошим, они могут придумать особый способ (API) общаться друг с другом, чтобы помочь лучше выработать стратегию.
Я решил не упоминать несколько процессоров / ядер здесь, потому что абстракция становится довольно сложной (и переключение контекста все еще прозрачно для большинства приложений). Я мог бы, вероятно, начать с того, что каждая команда в игре представляет отдельный процессор / ядро, и большинство игр все еще отстой, потому что они позволяют нескольким командам играть вместе в игре. Будущее может выглядеть как MMORPG, где многие люди могут играть вместе в игре разных команд.
Попытка разработать детскую метафору для системы распределенной обработки на многих основных компьютерах или во многих хост-сетях была бы довольно интересной игрой, но это не то, о чем просила опера.
Заметка:
Передача сообщений выше является ссылкой на множество форм общения, которые программы используют для общения друг с другом. Как и у людей, у приложений есть много способов общаться друг с другом. Запись похожа на передачу сериализованных данных, общение - на сетевое взаимодействие, шепот - на сетевое соединение по зашифрованному соединению, базы данных - на счетную карточку (конечная структура с четко определенными данными), а использование MSMQ - на нажатие азбуки Морзе, ударяя голову о твердая поверхность.
Большинство других форм общения за пределами этого слишком размыты для меня, чтобы считать их неразличимыми.
В сторону:
Если вы когда-либо играли в онлайн-игры, такие как Halo, у людей, которые присоединяются к группам (или становятся профессиональными игроками), обычно есть сокращенный язык, чтобы давать призывы направлять друг друга, где находятся игроки другой команды и что они используют. Это действительно неприятно, если вы не знаете, каковы вызовы, но это удивительно эффективно во время игры.
Интересно, что, хотя большинство людей, живущих в определенной культуре, говорят на одном языке, но в этой культуре люди разрабатывают более короткие лаконичные доменные языки, которые оптимизированы для решения конкретных задач. В вычислительной технике я бы сравнил это с API.