Kunstunterricht (Multi-Threaded-Anwendung)
Da es keine Klasse ohne Lehrer geben kann, brauchen Sie einen Lehrer (Hauptthema). Wenn Sie in die Klasse kommen, setzen Sie sich, und der Lehrer ist für alle verantwortlich und weist die Klasse an, Bilder für den Tag zu malen.
Der Lehrer weist allen Schülern den Tag zu, an dem mit dem Malen begonnen werden soll (Fadeninitialisierung und -zuweisung).
Da die Schule nur so viele Farben hat, müssen alle Farben miteinander teilen (Farben repräsentieren die Erinnerung).
Nehmen wir an, Sie malen einen Drachen und möchten ihm verrückte rote Augen geben, aber jemand anderes verwendet die rote Farbe. Sie können nicht einfach hinübergehen und die Farbe für sich selbst nehmen, da sonst niemand in der Lage wäre, sie zu verwenden. Stattdessen bitten Sie höflich darum, die Farbe zu teilen (Ressourcen sperren). Sie verbrauchen ein wenig und geben es dann weiter. Es kann sein, dass Sie etwas warten müssen, bis Sie es zurückbekommen, aber jeder, der es braucht, kann es bekommen, ohne sich zu streiten (Rennbedingungen).
Am Ende des Unterrichts schließt der Lehrer den Unterricht ab (Thread-Joining).
Gaming (Multi-Prozess-Anwendung)
Mit Freunden ein Kartenspiel spielen (oder ein gleichwertiges Spiel mit Sammlerstücken):
Nehmen wir an, Sie treffen sich nach der Schule mit Ihren Freunden (Prozessen). Es sind keine Lehrer da, und niemand ist da, um Ihnen zu sagen, was Sie tun sollen.
Jeder kommt zusammen, um Spiele zu spielen (Multi-Prozess- oder Multi-Layer-Anwendung).
Sie überlegen genau, wie Sie Ihre Karten einsetzen können, um Ihre Gegner zu besiegen (interne Verarbeitung), und Sie versuchen, Ideen mit Ihrem Partner zu teilen, wenn Sie eine Idee haben (Weitergabe von Nachrichten).
Wenn du wirklich gut wirst, kannst du einem Club beitreten:
Leader (Executive-Programm) Mitglieder (Unterprogramme)
Wenn der Club wirklich gut wird, haben sie möglicherweise eine spezielle Methode (API), um miteinander zu kommunizieren und eine bessere Strategie zu entwickeln.
Ich habe hier auf mehrere Prozessoren / Kerne verzichtet, da die Abstraktion ziemlich kompliziert wird (und die Kontextumschaltung für die meisten Anwendungen immer noch transparent ist). Ich könnte wahrscheinlich damit beginnen, dass jedes Team im Spiel einen separaten Prozessor / Kern darstellt und die meisten Spiele immer noch schlecht sind, weil sie nur einigen Teams erlauben, zusammen in einem Spiel zu spielen. Die Zukunft könnte eher wie ein MMORPG aussehen, in dem viele Leute in einem Spiel in vielen verschiedenen Teams zusammenspielen können.
Der Versuch, eine Kindermetapher für ein Distributionsverarbeitungssystem auf vielen Kerncomputern oder auf vielen Hostnetzwerken zu entwickeln, wäre ziemlich interessant, aber das ist nicht das, wonach die Op gefragt hat.
Hinweis:
Die oben angegebene Meldung bezieht sich auf die vielen Kommunikationsformen, mit denen Programme miteinander kommunizieren. Anwendungen haben wie Menschen viele Möglichkeiten, miteinander zu kommunizieren. Schreiben ist wie das Weiterleiten von serialisierten Daten, Sprechen ist wie das Vernetzen, Flüstern ist wie das Vernetzen über eine verschlüsselte Verbindung, Datenbanken sind wie eine Scorecard (endliche Struktur mit genau definierten Daten), und MSMQ zu verwenden ist wie das Tippen auf Morsecode, indem Sie Ihren Kopf gegen a schlagen feste Oberfläche.
Die meisten anderen Kommunikationsformen verschwimmen zu sehr, als dass ich sie für nicht unterscheidbar halten könnte.
Beiseite:
Wenn Sie schon einmal ein Online-Spiel wie Halo gespielt haben, haben die Personen, die Gruppen beitreten (oder Profispieler werden), normalerweise eine verkürzte Sprache, um sich gegenseitig zu informieren, wo sich die Spieler des anderen Teams befinden und was sie verwenden. Es ist wirklich unangenehm, wenn Sie die Callouts nicht kennen, aber es ist überraschend effektiv während des Spiels.
Es ist interessant, wie die meisten Menschen, die in einer bestimmten Kultur leben, eine gemeinsame Sprache sprechen, innerhalb dieser Kultur jedoch kürzere, prägnante Domänensprachen entwickeln, die für bestimmte Aufgaben optimiert sind. Beim Rechnen würde ich das mit einer API vergleichen.