Jak v praxi používáte paralelizmus rubrika: Programování: Jiné

Dnes už máme hodně jazyků, které umožňují paralelizmus by jazyk. Některé si ještě pomáhají syntaxí, některé to řeší rozdělením na mutable/imutable kód a funkcionálnem.
Teorie je známá, ale jak to funguje a jak to používáte v praxi? Musíte tomu kódu nějak pomáhat, nebo si je schopen engine/compilátor sám určit, na kolika jádrech to má, a co zparalelizuje a co ne.

Neznam sice Haskel, ale prijde mi z tech odpovedi, ze tu paralelizaci prilis zjednodusujete. Predstava ze neco samo spravne paralelizuje jakykoli kod je usmevna :-) K tomu me napada otazka, jak merite skutecny prinos takove paralelizace ? To ze neco pustim ve sto threadech jeste neznamena, ze se celkovy vykon zlepsil. Treba jen sekvencni cteni z disku muze byt nakonec lepsi, nez nahodne paralelni cteni.
Typicky lze ulohy rozdelit na CPU a I/O. U obou ma paralelizace smysl, ovsem neni rozhodne snadna. Stejne tak je v praxi velmi casty pripad uloha, ktera pracuje se sdilenymi daty.
U CPU operaci zalezi na konkretnim hardware (CPU architekture) kde takova uloha bezi. Protoze skutecny vykon ovlivnuje zaprve minimalizace blokovani jednotlivych threadu a cteni/zapis dat do sdilene pameti, kde v pripade dnes uz beznych vicejadrovych procesoru hraje znacnou roli jev zvany false sharing a tady vam asi zadna automatika moc nepomuze :-) Naprosto bezne je i prehazovani poradi provadeni instrukci procesorem, ktere dnes provadi vsechny architektury, IA konzervativneji, ARM vice agresivne. Toto vse je treba zohlednit pokud ma mit paralelizace skutecny prinos.
U I/O operaci je nutna podpora celeho prostredi (ne jen jazyka) kde aplikace bezi pro asynchronni zpracovani. Typicky pripad je treba zpracovani HTTP requestu na serveru. Pokud by se ve zpracovani reqestu kde se napriklad cte soubor z disku postupovalo klasicky synchronne, moc velka slava to nebude. Zde ma paralelizace zpracovani pomoci asynchronniho volani dlouhotrvajicich I/O operaci vyznam, protoze dokaze vratit thread zpracovavajici request zpet do hry, po dobu trvani I/O operace. Jak ve Windows API tak v .NET je pro toto jiz leta podpora, budto APM patternem nebo noveji jazykovymi konstrukcemi async/await coz je ale stale jen omacka kolem tehoz. Stale je treba vedet kdy neco takoveho pouzit, aby to davalo smysl a bylo prinosem. I kdyz Asynchronous Everything ;-)
Pro zobrazení všech 7 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře