Dobry clanok ale bolo by fajn keby si uz ludia spravili poriadok v tom co znamena parallel a concurrent.
Erlang NIE je paralelny jazyk, ale JE konkurentny jazyk.
Parallel - pouzitie viacerych CPU na rychlejsie spracovanie JEDNEJ ulohy (praca nad jednymi a tymi istymi datami)
Concurrent - spracovavanie viacerych nezavislych uloh (kazda so svojimi datami) naraz. Jazyk moze byt konkurentny aj ked VM-ka bezi iba na 1 CPU.
Tak jednoduché to není a ani definice dostupné na internetu se neshodnou. Obecně "concurrent" je situace, kdy máte více úloh, které sdílí nějaké zdroje. Mohou to být data, přístup na disk apod. Ale musí tam být nějaký zdroj, o který se přetahují. Pokud jsou úlohy nezávislé, tak si nekonkurují a bavíme se tak maximálně o multitaskingu OS.
Osobně pojmem "parallel program" označuji něco, co umí provozovat více instancí jedné úlohy. Zda sdílí data pro mne není důležité. Za paralelní program považuji i konvertor obrázků, který dokáže vytížit více jader, přestože každé konvertuje jiný obrázek.
No a "parallel execution" je jen popis situace, kdy běží v jednu chvíli více procesů. Jestli to jsou paralelní procesy nebo konkurenční procesy na názvu nic nemění.
Nemas pravdu, pravdu ma predrecnik. Viz http://www.youtube.com/watch?v=cN_DpYBzKso
Paralelitu lze definivat ruznymi spusoby z ruznych pohledu.
Hw pohled:
Paralelne muzes pracovat I na jedne cpu. Je nekolik druhu paralel.
Na ryznych cipech,
Na ruznych jadrech stejneho cpu,
Hyperthreading...(to je mislim intelskej nazev, obecne je to multithreading)
To vse zalezi na hardware. Dulezite je, ze musis mit vic threadu aby jsi mohl mluvit o paralelite (>1). To je z hlediska hardware (pozor, thread v tohmle smyslu berte jako prozess z jakehokoli prostredi.
Zde se nedaji editovat komentare?
Erlang samozrejme muzes spustit I na vice jadrech, to mi prozradila kratka google-search. Hned na prni strance jsem nasel:https://www.google.de/url?sa=t&source=web&rct=j&ei=h8HQU7voIceG4gTmx4GwCg&url=http://www.diva-portal.org/smash/get/diva2%253A392243/FULLTEXT01.pdf&cd=3&ved=0CCMQFjAC&usg=AFQjCNFHekos6wHUDRJErO_m7rR7iOCSEA&sig2=0pARkApXErhQk2Lu5X0mag
Asi si to nekdy prectu....
Wikipedia: Concurrent computing is related to but distinct from parallel computing, though these concepts are frequently confused, and both can be described as "multiple processes executing at the same time".
Jsem se do roho zacetl :) a mam pocit ze pravdu mame tak nejak vsichni. Erlang je concurrent programing language, ale nidke neni psano, ze nemusi byt parallelni (t.j. vice jader). Je to proste o uhlu pohledu. Kdyz se divas, jak to pracuje na opravdovim hardware tak se bavis o necem jinem, nez kdyz se divas z dataflow pohledu.
Pak nemá smysl bavit se o konkurenčním nebo paralelním. Dnes mají CPU více jader, takže i 25 let staré binárky spouštěné pod emulátorem DOSu najednou začaly být paralelní. To tenkrát jejich autora asi ani nenapadlo, mohli to využít pro marketing.
Zkrátka se snažím říci, že CPU je zdrojem z pohledu OS. Pokud aplikace nevytváří žádná vlákna, neřídí zdroje a s ničím se nesynchronizuje, pak prostě není paralelní ani konkurenční. Fakt, že ji pak spustíte na OS, který umí multitasking, na tom nic nezmění.
Spravne aplikace ketra ma jenom jedno vlakno je serielni. Ale erlang nema jenom jedno vlakno. Z podledu os ano, ale on ma vlastni scheduler a svoje vlakna (alespon jsem to tak pochopil) -> concurrent.
Ale da se I nejak pustit s vice schedulerama -> parallel
ted kdybych umel erlang, tak bych mohl I vysvetlit jak to funguje :)
Proc proboha blokuje root slovo f a c t s. ????
s/f a c t s/$(tim_spravnym)
http://erlang.2086793.n4.nabble.com/Some-f a c t s-about-Erlang-and-SMP-td2108770.html
> Pak nemá smysl bavit se o konkurenčním nebo paralelním.
Ma to smysl, protoze jsou to ruzne veci. Muzete mit paralelismus bez concurrency (napr. vektorove zpracovani nebo pipelining v CPU), i concurrency bez paralelismu (vice threadu na jednom CPU, coz se hodi, jakmile nejake z nich ceka treba na I/O a blokuje).
Ne, pokud CPU je z pohledu programu zdroj, pak všechny programy jsou konkurentní, i kdyby o tom nevěděly. Stejně tak pokud má CPU více jader, tak programy na něm běžící jsou paralelní, aniž by vůbec chtěly.
To není můj názor, to nám podsouvá "ebik" tvrzením, že vlastnosti CPU mají nějaký vliv na povahu programu. V jeho světě jakmile CPU umí paralelismus i concurrency, tak všechny programy na něm jsou paralelní a concurrent.
Já bych s vámi ještě nedávnou souhlasil, ale byl jsem zde v diskusi přemluven, že tyhle dvě charakteristiky nejsou vůbec závislé na tom jak a v čem jsou programy zprogramované, ale na HW, na kterém se to spustí.
Nemohli byste si precist rozdil mezi SPMD A MPMD? : http://en.m.wikipedia.org/wiki/Flynn's_taxonomy
Protoze to je presne to, v cem se tady motate. Jedni mysli SPMD, druhy mysli MPMD, pravdu pak maji vsichni.
Já nic nepodsouvám, já jsem pouze reagoval na to, když jste psal, o programech sdílejících zdroje, bez toho abyste uvedl definici zdroje. Že se jedná o zdroj z pohledu programu (který o ostatních programech běžících na systému většinou nic neví), jste odhalil až v dalších příspěvcích.