cóż, to naprawdę zależy od tego, co rozwijacie. odpowiedź, w zależności od tego, co opracowujesz, może wahać się od „nieistotna” do „absolutnie krytyczna i oczekujemy, że wszyscy w zespole będą dobrze rozumieć i wykorzystywać równoległe implementacje”.
w większości przypadków solidne zrozumienie i stosowanie blokad, wątków oraz zadań i pul zadań będzie dobrym początkiem, gdy będzie wymagana potrzeba równoległości. (zależy od języka / lib)
dodaj do tego różnice w projektach, które musisz wykonać - w przypadku nietrywialnego przetwarzania wieloprocesowego często trzeba nauczyć się kilku nowych modeli programowania lub strategii paralelizacji. w takim przypadku czas na naukę, wystarczająco dużo czasu, aby mieć solidne zrozumienie i aktualizację istniejących programów, może zająć zespołowi przez rok (lub dłużej). po osiągnięciu tego punktu (miejmy nadzieję!) nie dostrzeżesz ani nie podejdziesz do problemów / wdrożeń tak, jak robisz to dzisiaj (pod warunkiem, że jeszcze tego nie zrobiłeś).
Kolejną przeszkodą jest to, że skutecznie optymalizujesz program do określonego wykonania. jeśli nie masz dużo czasu na optymalizację programów, to tak naprawdę nie skorzystasz z niego tak dobrze, jak powinieneś. wysoki poziom (lub oczywista) równoległość może poprawić postrzeganą prędkość twojego programu przy dość niewielkim wysiłku, i to tyle, ile pójdzie dziś wiele zespołów: „Zrównolegliliśmy naprawdę oczywiste części aplikacji” - w niektórych przypadkach jest to w porządku. czy korzyść z przyjęcia nisko wiszących owoców i zastosowania prostej paraliżacji będzie proporcjonalna do liczby rdzeni? często, gdy istnieją dwa do czterech rdzeni logicznych, ale nie tak często. w wielu przypadkach jest to akceptowalny zwrot, biorąc pod uwagę inwestycję czasu. ten model równoległy jest wprowadzeniem wielu ludzi do wdrażania dobrych zastosowań równoległości.
czego nauczysz się dzięki tym trywialnym równoległym modelom, nie będą idealne we wszystkich złożonych scenariuszach równoległych; skuteczne stosowanie złożonych równoległych projektów wymaga znacznie innego zrozumienia i podejścia. te proste modele są często odłączane lub mają trywialną interakcję z innymi komponentami systemu. również wiele implementacji tych trywialnych modeli nie skaluje się dobrze w celu skutecznego złożonego układu równoległego - wykonanie złego złożonego równoległego projektu może zająć tyle samo czasu co wykonanie modelu prostego. ill: wykonuje dwa razy szybciej niż model jednowątkowy, wykorzystując 8 rdzeni logicznych podczas wykonywania. najbardziej powszechne przykłady wykorzystują / tworzą zbyt wiele wątków i wysoki poziom zakłóceń synchronizacji. ogólnie jest to określane jako spowolnienie równoległe. dość łatwo można go spotkać, jeśli wszystkie równoległe problemy traktuje się jak zwykłe problemy.
powiedzmy więc, że naprawdę powinieneś wykorzystywać efektywny wielowątkowość w swoich programach (mniejszość, w dzisiejszym klimacie): będziesz musiał efektywnie zastosować prosty model, aby nauczyć się modelu złożonego, a następnie ponownie nauczyć się, jak podchodzić do przebiegu programu i interakcji. model złożony to miejsce, w którym powinien ostatecznie znajdować się Twój program, ponieważ tam właśnie znajduje się sprzęt i tam będą wprowadzane najbardziej dominujące ulepszenia.
wykonanie prostych modeli można sobie wyobrazić jak widelec, a złożone modele działają jak złożony ekosystem. myślę, że zrozumienie prostych modeli, w tym ogólnego blokowania i wątków, powinno lub będzie się wkrótce spodziewać od pośrednich programistów, gdy domena (w której tworzysz) używa go. zrozumienie złożonych modeli jest wciąż nieco niezwykłe (w większości domen), ale myślę, że popyt wzrośnie dość szybko. jako programiści znacznie więcej naszych programów powinno obsługiwać te modele, a większość zastosowań jest daleko w tyle za zrozumieniem i wdrożeniem tych koncepcji. Ponieważ liczba logicznych procesorów jest jednym z najważniejszych obszarów poprawy sprzętu, zapotrzebowanie na osoby rozumiejące i potrafiące wdrażać złożone systemy z pewnością wzrośnie.
wreszcie wiele osób uważa, że rozwiązaniem jest „dodanie równoległości”. często lepiej jest przyspieszyć istniejącą implementację. w wielu przypadkach jest to o wiele łatwiejsze i prostsze. wiele programów na wolności nigdy nie zostało zoptymalizowanych; niektórzy ludzie odnieśli wrażenie, że niedopuszczona wersja zostanie wkrótce przyćmiona przez sprzęt. poprawa projektu lub algorytmów istniejących programów jest również ważną umiejętnością, jeśli wydajność jest ważna - rzucanie większej liczby rdzeni w problemy nie musi być najlepszym lub najprostszym rozwiązaniem.
podczas atakowania na nowoczesne komputery PC większość z nas, którzy muszą wdrożyć dobre systemy równoległe, nie będzie musiała wychodzić poza wielowątkowość, blokowanie, biblioteki równoległe, wartość książki do przeczytania oraz duże doświadczenie w pisaniu i testowaniu programów (zasadniczo znacznie zmieniając sposób, w jaki programy do pisania).