Хороший параллелизм требует гораздо большего, чем просто добавить несколько потоков в приложение и надеяться на лучшее. Существует диапазон того, насколько параллельная программа может идти от смущающе параллельной к чисто последовательной. Любая данная программа может использовать закон Амдала, чтобы выразить масштабируемость проблемы или алгоритма. Пара квалификаций для смущающе параллельного заявления была бы:
- Нет общего состояния, каждая функция зависит только от параметров, переданных в
- Нет доступа к физическим устройствам (графическим картам, жестким дискам и т. Д.)
Существуют и другие квалификации, но только с этими двумя мы можем понять, почему игры, в частности, не так просты, как вы думаете, чтобы использовать преимущества нескольких ядер. Например, модель мира, которая будет отображаться, должна использоваться совместно, поскольку различные функции вычисляют физику, движение, применяют искусственный интеллект и т. Д. Во-вторых, каждый кадр этой игровой модели должен отображаться на экране с помощью графической карты.
Честно говоря, многие производители игр используют игровые движки сторонних производителей. Это заняло некоторое время, но эти сторонние игровые движки теперь намного более параллельны, чем раньше.
Есть большие архитектурные проблемы в борьбе с эффективным параллелизмом
Параллелизм может принимать разные формы, от запуска заданий в фоновом режиме до полной архитектурной поддержки параллелизма. Некоторые языки предоставляют вам очень мощные функции параллелизма, такие как ERLANG , но требуют, чтобы вы по-разному думали о том, как вы создаете свое приложение.
Не каждая программа действительно нуждается в сложности полной многоядерной поддержки. Одним из таких примеров является налоговое программное обеспечение или любое приложение на основе форм. Когда большая часть вашего времени тратится на то, чтобы пользователь что-то сделал, сложность многопоточных приложений просто не так полезна.
Некоторые приложения поддаются более смущающему параллельному решению, например, веб-приложениям. В этом случае платформа начинает смущать параллельно, и вам не нужно навязывать конфликт потоков.
Суть:
Не все приложения действительно страдают, если не используют преимущества нескольких потоков (и, следовательно, ядер). Для тех, кому это больно, иногда вычисления не подходят для параллельной обработки или накладных расходов для ее координации, что делает приложение более хрупким. К сожалению, параллельная обработка все еще не так проста, как это должно быть хорошо.