Klasa artystyczna (aplikacja wielowątkowa)
Ponieważ nie ma klasy bez nauczyciela, potrzebujesz nauczyciela (główny wątek). Po przejściu do klasy siadasz, a nauczyciel rozlicza się ze wszystkimi i przydziela klasę do malowania obrazów na dany dzień.
Nauczyciel przydziela wszystkich uczniów na dzień, aby rozpocząć malowanie (inicjowanie wątku i przypisanie).
Ponieważ szkoła ma tylko tyle farb, wszyscy będą musieli dzielić się ze sobą kolorami (farby reprezentują pamięć).
Powiedzmy, że malujesz smoka i chcesz nadać mu zwariowane czerwone oczy, ale ktoś inny używa czerwonej farby. Nie możesz po prostu podejść i wziąć farby dla siebie, bo wtedy nikt inny nie byłby w stanie jej użyć. Zamiast tego grzecznie poprosisz o udostępnienie (zablokowanie zasobów) farby. Używasz trochę, a następnie przekazujesz. Być może będziesz musiał trochę poczekać, aby go odzyskać, ale pozwala wszystkim, którzy go potrzebują, zdobyć trochę bez walki o farbę (warunki wyścigu).
Na koniec klasy nauczyciel zwalnia klasę (łączenie wątków).
Gry (aplikacja wieloprocesowa)
Granie w grę karcianą z przyjaciółmi (lub równoważna gra z przedmiotami kolekcjonerskimi):
Powiedzmy, że spotykasz się ze znajomymi (procesami) po szkole. W pobliżu nie ma nauczycieli, nikt nie powiedziałby ci, co masz robić.
Wszyscy spotykają się, aby grać w gry (aplikacja wieloprocesowa lub wielowarstwowa).
Zastanawiasz się, jak wykorzystać swoje karty do pokonania przeciwników (przetwarzanie wewnętrzne) i próbujesz dzielić się pomysłami ze swoim partnerem, gdy wpadniesz na pomysł (przekazanie wiadomości).
Jeśli poczujesz się naprawdę dobrze, możesz dołączyć do klubu:
Lider (program wykonawczy) Członkowie (podprogramy)
Jeśli klub stanie się naprawdę dobry, może wymyślić specjalny sposób (API) do komunikowania się ze sobą w celu lepszej strategii.
Zdecydowałem się nie wspominać o wielu procesorach / rdzeniach, ponieważ abstrakcja staje się dość skomplikowana (a przełączanie kontekstu jest nadal przezroczyste dla większości aplikacji). Mógłbym zacząć od stwierdzenia, że każda drużyna w grze reprezentuje osobny procesor / rdzeń, a większość gier wciąż jest do bani, ponieważ pozwalają na grę tylko kilku drużynom. Przyszłość może wyglądać bardziej jak MMORPG, w którym wiele osób może grać razem w grze w wielu różnych zespołach.
Próba opracowania dziecięcej metafory dla systemu przetwarzania rozproszonego na wielu komputerach lub wielu sieciach hostów byłaby całkiem interesująca do zabawy, ale nie o to prosiła operacja.
Uwaga:
Przekazywanie wiadomości powyżej odnosi się do wielu form komunikacji używanych przez programy do komunikowania się ze sobą. Podobnie jak ludzie, aplikacje mają wiele sposobów komunikowania się ze sobą. Pisanie jest jak przesyłanie serializowanych danych, mówienie jest jak praca w sieci, szeptanie jest jak praca w sieci za pomocą szyfrowanego połączenia, bazy danych są jak karta wyników (skończona struktura z dobrze zdefiniowanymi danymi), a używanie MSMQ jest jak stukanie w kod Morse'a poprzez walenie głową w twarda powierzchnia.
Większość innych form komunikacji poza tym rozmazuje się zbyt mocno, abym uważał je za nierozróżnialne.
Na bok:
Jeśli kiedykolwiek grałeś w grę online, taką jak Halo, ludzie, którzy dołączają do grup (lub stają się zawodowymi graczami), zwykle mają skrócony język, aby wydawać połączenia, aby kierować się nawzajem tam, gdzie są gracze drugiej drużyny i czego używają. To naprawdę okropne, jeśli nie znasz połączeń, ale jest zaskakująco skuteczne podczas gry.
Ciekawe, jak pomimo tego, że większość ludzi żyjących w danej kulturze mówi wspólnym językiem, ale w tej kulturze ludzie rozwijają krótsze, zwięzłe języki domenowe, zoptymalizowane do obsługi określonych zadań. W informatyce porównałbym to do API.