ну, це дійсно залежить від того, що ти розвиваєш. відповідь, залежно від того, що ви розробляєте, може варіюватися від "це несуттєво" до "це абсолютно критично, і ми очікуємо, що всі в команді добре розуміють та використовують паралельні реалізації".
у більшості випадків ґрунтовне розуміння та використання замків, ниток та завдань та пулів завдань стане хорошим початком, коли необхідна паралелізм. (залежить від lang / lib)
додайте до цього відмінності в конструкціях, які ви повинні зробити - для нетривіального багатопроцесорного оброблення потрібно часто вивчати кілька нових моделей програмування або стратегій паралелізації. у такому випадку час на навчання, недостатній час, щоб мати чітке розуміння та оновити існуючі програми, може зайняти команду на рік (або більше). як тільки ви досягнете цієї точки, ви (сподіваємось!) не будете сприймати або не підходити до проблем / реалізацій, як це робите сьогодні (за умови, що ви ще не зробили цього переходу).
Ще одна перешкода - ви ефективно оптимізуєте програму для певного виконання. якщо вам не приділено багато часу на оптимізацію програм, то ви справді не отримаєте від неї стільки, скільки слід. Висока (або очевидна) паралелізація може підвищити сприйняту швидкість вашої програми з досить невеликими зусиллями, і це стосується багатьох команд сьогодні: "Ми паралелізували дійсно очевидні частини програми" - це добре в деяких випадках. чи буде користь взяти низько висячий плід і використовувати просту паралельність пропорційною кількості ядер? часто, коли є два-чотири логічні ядра, але не так часто поза цим. у багатьох випадках це прийнятний прибуток, враховуючи вкладення часу. ця паралельна модель є введенням багатьох людей у реалізацію корисних паралелізмів.
те, що ви дізнаєтесь, використовуючи цю тривіальну паралельну модель, не буде ідеальною у всіх складних паралельних сценаріях; ефективне застосування складних паралельних конструкцій вимагає значно іншого розуміння та підходу. ці прості моделі часто відокремлюються або мають тривіальну взаємодію з іншими компонентами системи. Крім того, багато реалізацій цих тривіальних моделей не впорядковують ефективні складні паралельні системи - погана складна паралельна конструкція може зайняти стільки ж часу, як і проста модель. ill: вона виконує вдвічі швидше, ніж модель з однопотоковою передачею, використовуючи при цьому 8 логічних ядер. більшість прикладів спільного використання використовують / створюють занадто багато потоків і високий рівень перешкод синхронізації. загалом це називається паралельним уповільненням. зіткнутися досить легко, якщо ви підходите до всіх паралельних проблем як до простих проблем.
тому, скажімо, ви дійсно повинні використовувати ефективні багатопотокові програми у своїх програмах (меншість, в умовах сучасного клімату): вам потрібно буде ефективно використовувати просту модель, щоб вивчити складну модель, а потім вивчити, як підходити до потоку та взаємодії з програмою. складна модель - це те, де в кінцевому підсумку повинна знаходитися ваша програма, оскільки саме там зараз знаходиться обладнання та де будуть досягнуті найбільш домінуючі вдосконалення.
виконання простих моделей може бути передбачено як вилка, а складні моделі функціонують як складна екосистема. Я думаю, що розуміння простих моделей, у тому числі загального блокування та нанизування рішень, має бути або скоро очікується від проміжних розробників, коли домен (у якому ви розробляєте) використовує його. розуміння складних моделей все ще дещо незвично (у більшості областей), але я думаю, попит зросте досить швидко. як розробники, набагато більше наших програм повинні підтримувати ці моделі, і більшість із них значно відстають у розумінні та реалізації цих концепцій. Оскільки логічний підрахунок процесорів є одним з найважливіших напрямків вдосконалення обладнання, попит на людей, які розуміють і можуть реалізувати складні системи, безумовно, зросте.
нарешті, є дуже багато людей, які вважають, що рішення - це лише "додати паралелізацію". Часто краще зробити швидше існуючу реалізацію. у багатьох випадках це набагато простіше і набагато простіше. багато програм у дикій природі ніколи не були оптимізовані; у деяких людей склалося враження, що неоптимізована версія буде скорочена апаратними засобами одного дня. вдосконалення дизайну або символів існуючих програм також є важливим навиком, якщо важлива продуктивність - кидати більше ядер при проблемах не обов'язково є найкращим чи найпростішим рішенням.
орієнтуючись на сучасні ПК, більшості з нас, кому потрібно реалізувати хороші паралельні системи, не потрібно виходити за межі багатопотокової, блокувальної, паралельної бібліотеки, варто читати книгу та багато досвіду написання та тестування програм (в основному, значно реструктуруючи те, як ви підхід до написання програм).