Dobra współbieżność wymaga znacznie więcej niż rzucania kilku wątków w aplikację i liczenia na najlepsze. Istnieje pewien zakres, w jakim program może iść od żenująco równoległego do czysto sekwencyjnego. Każdy program może korzystać z prawa Amdahla do wyrażenia skalowalności problemu lub algorytmu. Kilka kwalifikacji do żenująco równoległego wniosku to:
- Brak stanu wspólnego, każda funkcja zależy tylko od przekazanych parametrów
- Brak dostępu do urządzeń fizycznych (kart graficznych, dysków twardych itp.)
Istnieją inne kwalifikacje, ale dzięki tym dwóm możemy zrozumieć, dlaczego gry nie są tak łatwe, jak mogłoby się wydawać, aby skorzystać z wielu rdzeni. Po pierwsze, model świata, który będzie renderowany, musi być współdzielony, ponieważ różne funkcje obliczają fizykę, ruch, stosują sztuczną inteligencję itp. Po drugie, każda klatka tego modelu gry musi być renderowana na ekranie za pomocą karty graficznej.
Szczerze mówiąc, wielu twórców gier korzysta z silników gier produkowanych przez strony trzecie. Minęło trochę czasu, ale te silniki gier innych firm są teraz znacznie bardziej równoległe niż kiedyś.
W przypadku efektywnej współbieżności istnieją większe wyzwania architektoniczne
Współbieżność może przybierać różne formy, od uruchamiania zadań w tle do pełnego wsparcia architektury dla współbieżności. Niektóre języki zapewniają bardzo zaawansowane funkcje współbieżności, takie jak ERLANG , ale wymaga to odmiennego myślenia o sposobie tworzenia aplikacji.
Nie każdy program naprawdę potrzebuje złożoności pełnego wsparcia dla wielordzeniowych procesorów. Jednym z takich przykładów jest oprogramowanie podatkowe lub dowolna aplikacja sterowana formularzem. Gdy większość czasu spędzasz na oczekiwaniu na coś od użytkownika, złożoność aplikacji wielowątkowych nie jest tak przydatna.
Niektóre aplikacje są bardziej krępująco równoległe, na przykład aplikacje internetowe. W tym przypadku platforma zaczyna się żenująco równolegle i to od Ciebie nie musisz narzucać rywalizacji.
Dolna linia:
Nie wszystkie aplikacje są naprawdę uszkodzone, ponieważ nie korzystają z wielu wątków (a tym samym rdzeni). W przypadku tych, których to boli, czasami obliczenia nie są przyjazne dla równoległego przetwarzania lub narzutu w celu jego koordynacji sprawiłby, że aplikacja byłaby bardziej delikatna. Niestety równoległe przetwarzanie nie jest jeszcze tak łatwe, jak powinno być, aby zrobić dobrze.