Oświadczenie: Mój ulubiony rodzaj gier jest oparty na tekście i piszę to jako długoletni programista starego MUD.
Myślę, że ważne pytanie, które musisz sobie zadać, brzmi: czy potrzebujesz w ogóle nici? Rozumiem, że gra graficzna prawdopodobnie ma większe zastosowanie MT, ale myślę, że zależy to również od mechaniki gry. (Warto również wziąć pod uwagę, że dzięki procesorom graficznym, procesorom i wszystkim innym zasobom, które mamy dzisiaj, są znacznie potężniejsze, co sprawia, że obawy o zasoby są tak problematyczne, jak mogłoby się wydawać; w rzeczywistości 100 obiektów jest praktycznie zerowych). Zależy to również od tego, jak zdefiniujesz „wszystkie postacie jednocześnie”. Masz na myśli dokładnie w tym samym czasie? Nie będziesz tego miał, jak słusznie zauważa Peter, więc wszystko to jest bez znaczenia w dosłownym tego słowa znaczeniu; wydaje się tylko w ten sposób.
Zakładając, że przejdziesz do wątków: zdecydowanie nie powinieneś brać pod uwagę 100 wątków (a ja nawet nie zamierzam się zastanawiać, czy to za dużo dla twojego procesora, czy nie; odnoszę się tylko do komplikacji i praktyczności).
Pamiętaj jednak: wielowątkowość nie jest łatwa (jak podkreśla Philipp) i ma wiele problemów. Inni mają znacznie większe doświadczenie (o wiele) niż ja, ale mówię, że oni też sugerowaliby to samo (nawet gdyby byli bardziej zdolni niż ja - szczególnie bez mojej praktyki).
Niektórzy twierdzą, że nie zgadzają się, że wątki nie są korzystne, a niektórzy twierdzą, że każdy obiekt powinien mieć wątek. Ale (i znowu jest to cały tekst, ale nawet jeśli weźmiesz pod uwagę więcej niż jeden wątek, nie musisz - i nie powinien - rozważać go dla każdego obiektu), jak wskazuje Philipp, gry mają tendencję do iteracji po listach. Ale to nie tylko (jak sugeruje, chociaż zdaję sobie sprawę, że on reaguje tylko na twoje parametry tak niewielu obiektów) dla tak niewielu obiektów. W MUD jestem programistą, ponieważ mamy następujące (i to nie wszystko, co dzieje się w czasie rzeczywistym, więc miej to na uwadze):
(Liczba wystąpień jest oczywiście różna - wyższa i niższa)
Telefony komórkowe (NPC, tj. Postać inna niż gracz): 2614; prototypy: 1360 Obiekty: 4457; prototypy: 2281 Pokoje: 7983; prototypy: 7983. Każdy pokój ma zwykle swoją własną instancję, ale mamy też pokoje dynamiczne, to znaczy pokoje w pokoju; lub pokoje wewnątrz telefonu komórkowego, np. żołądek smoka; lub pokoje w obiektach, np. wchodzisz do magicznego obiektu). Należy pamiętać, że te dynamiczne pokoje istnieją na obiekt / pokój / telefon komórkowy, który faktycznie je zdefiniował. Tak, to bardzo przypomina pomysł World of Warcraft (nie gram, ale znajomy kazał mi grać, gdy miałem komputer z systemem Windows) przez pewien czas, z wyjątkiem tego, że mieliśmy go na długo przed stworzeniem World of Warcraft.
Skrypty: 868 (obecnie) (co dziwne, nasze polecenie statystyki nie pokazuje, ile mamy prototypów, więc dodam to). Wszystkie odbywają się w obszarach / strefach, a mamy ich 103. Mamy również specjalne procedury, które działają w różnych momentach. Mamy też inne wydarzenia. Następnie mamy również podłączone gniazda. Telefony poruszają się, wykonują różne czynności (oprócz walki), mają interakcje z graczami i tak dalej. (Podobnie jak inne rodzaje bytów).
Jak sobie z tym wszystkim poradzić bez opóźnień?
gniazda: select (), kolejki (wejście, wyjście, zdarzenia, inne rzeczy), bufory (wejście, wyjście, inne rzeczy) itp. Są one odpytywane 10 razy na sekundę.
postacie, przedmioty, pokoje, walka, wszystko: wszystko w centralnej pętli na różnych pulsach.
My (moja implementacja oparta na dyskusji między założycielem / innym programistą a mną) przeprowadziliśmy obszerne śledzenie połączonych list i testowanie poprawności wskaźnika i mamy więcej niż wystarczającą ilość wolnych zasobów, gdybyśmy rzeczywiście tego potrzebowali. Wszystko to (poza tym, że rozszerzyliśmy świat) istniało lata temu, kiedy było mniej pamięci RAM, mocy procesora, miejsca na dysku twardym itp. I nawet wtedy nie mieliśmy problemów. W opisanych pętlach (skrypty powodują to, podobnie jak resety obszarów / zaludnienia, podobnie jak inne rzeczy), potwory, obiekty (przedmioty) i inne rzeczy są tworzone, uwalniane i tak dalej. Połączenia są również akceptowane, odpytywane i wszystko, czego można oczekiwać.