Хороша паралельність вимагає набагато більше, ніж кидання кількох ниток у додаток та сподівання на найкраще. Існує діапазон того, як паралельна програма може переходити від бентежно паралельної до чистої послідовної. Будь-яка програма може використовувати закон Амдала, щоб висловити масштабність проблеми чи алгоритму. Кілька кваліфікацій для бентежно паралельної заявки будуть:
- Немає загального стану, кожна функція залежить лише від переданих параметрів
- Немає доступу до фізичних пристроїв (графічних карт, жорстких дисків тощо)
Є й інші кваліфікації, але тільки з цими двома ми можемо зрозуміти, чому ігри, зокрема, не такі прості, як можна подумати, скористатися кількома ядрами. По-перше, модель світу, яка буде відображена, повинна ділитися, оскільки різні функції обчислюють фізику, рух, застосовують штучний інтелект тощо. По-друге, кожен кадр цієї ігрової моделі повинен бути відображений на екрані за допомогою відеокарти.
Для справедливості багато виробників ігор використовують ігрові двигуни, які виробляються сторонніми сторонами. Минув деякий час, але ці сторонні ігрові двигуни зараз набагато паралельніші, ніж раніше.
Існують більші архітектурні виклики в боротьбі з ефективною одночасністю
Паралельність може приймати різні форми, від виконання завдань у фоновому режимі до повного архітектурного забезпечення паралельності. Деякі мови надають вам дуже потужні функції одночасності, такі як ERLANG , але це вимагає, щоб ви подумали зовсім інакше про те, як ви будуєте свою програму.
Не кожна програма дійсно потребує складності повного багатоядерного забезпечення. Одним із таких прикладів є податкове програмне забезпечення або будь-яка додаткова форма. Коли більша частина вашого часу витрачається на очікування користувача, щоб зробити щось, складність багатопотокових програм просто не така корисна.
Деякі програми піддаються більш бентежно паралельним рішенням, наприклад, веб-додаткам. У цьому випадку платформа починає бентежно паралельно, і вам не доведеться нав'язувати розбіжність ниток.
Суть:
Не всі програми дійсно шкодять, не скориставшись декількома потоками (і, таким чином, ядрами). Для тих, кого це постраждало, іноді обчислення не сприятливі для паралельної обробки або накладні витрати для їх узгодження зробили б додаток більш крихким. На жаль, паралельна обробка все ще не така проста, як це повинно бути добре.