K čemu JavaScript generátory?

Vertex

Re:K čemu JavaScript generátory?
« Odpověď #15 kdy: 13. 08. 2015, 14:40:40 »
Zdravim,

chcem vám všetkým poďakovať za vaše odpovede. Už mi je to jasnejšie. Ešte sa s tým pohrám aby sa mi to dostalo do krvi.

Vďaka.


Ivoszz

Re:JavaScript generatory
« Odpověď #16 kdy: 13. 08. 2015, 15:27:24 »
Vysvětlím polopaticky, máme funkci FOO pět minut počítající FFT, mezitím přijdou data ze soketu, takže se ihned vyvolá asynchronně funkce BAR a zcela nezávisle na FOO data zobrazí na monitoru. Bez asynchronnosti by se funkce BAR zavolala až po skončení FOO, přesně tak jako se to děje v JS.
Myslím že už jsem to vysvětlil dostatečně. (Uvedené chování jde zajistit i na jednoprocesorovém stroji)

Ale my vám rozumíme :), není potřeba to vysvětlovat polopatisticky. Jen nesouhlasíme s vaší definicí (pojetím) toho, co je asynchronní... :D
A jen tak mimochodem, i ten výpočet FFT lze triviálně napsat tak, že bude obsluhovat příchozí požadavky rychleji než to zvládne preemptivní multitasking, který tak propagujete. Změníte pak svou definici asynchronosti?

v

Re:JavaScript generatory
« Odpověď #17 kdy: 13. 08. 2015, 15:32:58 »
Vysvětlím polopaticky, máme funkci FOO pět minut počítající FFT, mezitím přijdou data ze soketu, takže se ihned vyvolá asynchronně funkce BAR a zcela nezávisle na FOO data zobrazí na monitoru. Bez asynchronnosti by se funkce BAR zavolala až po skončení FOO, přesně tak jako se to děje v JS.
Myslím že už jsem to vysvětlil dostatečně. (Uvedené chování jde zajistit i na jednoprocesorovém stroji)

zřejmě používáte nějakou definici současnosti se kterou nejsem obeznámený

Ivoszz

Re:JavaScript generatory
« Odpověď #18 kdy: 13. 08. 2015, 16:20:01 »
zřejmě používáte nějakou definici současnosti se kterou nejsem obeznámený

Používám definici, která je poměrně obecně přijímána (pokud se bavíme o synchronních/asynchronních voláních v oblasti SW) a je stručně popsána takto:

When you execute something synchronously, you wait for it to finish before moving on to another task. When you execute something asynchronously, you can move on to another task before it finishes.

Toto je taky relevantní k původnímu dotazu.

k

Re:JavaScript generatory
« Odpověď #19 kdy: 13. 08. 2015, 16:53:32 »
When you execute something asynchronously, you can move on to another task before it finishes.

Normální člověk tohle pochopí tak, že operace something se zahájí bezprostředně ihned a volající nečeká na její dokončení a může si mezi tím dělat svoje věci, implicitně z toho vyplývá paralelní běh.
Jistě se to nedá pochopit tak, že se čeká pět minut až volající dá pokoj a pak teprve se zavolá something.


v

Re:JavaScript generatory
« Odpověď #20 kdy: 13. 08. 2015, 18:57:23 »
zřejmě používáte nějakou definici současnosti se kterou nejsem obeznámený

Používám definici, která je poměrně obecně přijímána (pokud se bavíme o synchronních/asynchronních voláních v oblasti SW) a je stručně popsána takto:

When you execute something synchronously, you wait for it to finish before moving on to another task. When you execute something asynchronously, you can move on to another task before it finishes.

Toto je taky relevantní k původnímu dotazu.

"současností" jsem narážel na toto:

Antonymum synchronní není neblokující. setInterval(f, 0) je neblokující, ale ne asynchronní, kdyby býval byl setInterval(f, 0) asynchronní, potom by k zahájení vykonávání f došlo bezprostředně a v jeden čas by tak běžely dvě funkce najednou a to v JS není možné.

resp. na to, že funkce "běží najednou", proto neustále melu o více procesorech, jestli funkce mohou běžet "najednou" na jednom procesoru, tak můžou i v javascriptu a tím i asynchronně dle k-ovy definice

v

Re:JavaScript generatory
« Odpověď #21 kdy: 13. 08. 2015, 18:59:27 »
When you execute something asynchronously, you can move on to another task before it finishes.

Normální člověk tohle pochopí tak, že operace something se zahájí bezprostředně ihned a volající nečeká na její dokončení a může si mezi tím dělat svoje věci, implicitně z toho vyplývá paralelní běh.
Jistě se to nedá pochopit tak, že se čeká pět minut až volající dá pokoj a pak teprve se zavolá something.

takže hardwarové přerušení není asynchronní, protože po přiřazení handleru se ten nevykoná okamžitě?

Re:K čemu JavaScript generátory?
« Odpověď #22 kdy: 13. 08. 2015, 21:09:14 »
Hardware do toho nemotejte, to se tu už důkladně diskutovalo http://forum.root.cz/index.php?topic=11249.msg132438#msg132438  a v zásadě to skončilo, že jedna strana diskutujících uvažovala v rámci hw a druhá v rámci virtuálního stroje (např. jvm).

Celé nedorozumění v případě javascriptu jednoduše spočívá v tom, že lidé zaměňují odložené spuštění (zařazení do fronty úloh) a paralelní běh (současný běh více položek z té fronty), část z nich si pak myslí, že odložené spuštění je znakem asynchronnosti. Navíc celý systém callbacků budí dojem, že si žijí svým vlastním životem a že to celé „běží tak nějak naráz“. S vyjímkou volání ajaxu ale všechno v javascriptu běží pěkně jedno za druhým. Alespoň v prohlížeči - nevím jak to je v případě node.js a spol, tam je asi možné ledacos.

Radek Miček

Re:K čemu JavaScript generátory?
« Odpověď #23 kdy: 13. 08. 2015, 21:47:34 »
část z nich si pak myslí, že odložené spuštění je znakem asynchronnosti

Pokud nečekáte na výsledek, tak samozřejmě je.

Petr

Re:K čemu JavaScript generátory?
« Odpověď #24 kdy: 13. 08. 2015, 22:42:27 »
Pokud bych to bral, jako že u asynchronního běhu není přesně dáno, kdy se úloha zadaná k provedení skutečně začne vykonávat a na tento začátek se nečeká, pak by bylo jedno, jak moc paralelně to probíhá. A pak by mě zajímalo, proč některým vadí, že něco něběží +-skutečně paralelně. Že by to byl klasicky zase jen problém definice?

JS

Re:JavaScript generatory
« Odpověď #25 kdy: 14. 08. 2015, 08:28:49 »
Normální člověk tohle pochopí tak, že operace something se zahájí bezprostředně ihned a volající nečeká na její dokončení a může si mezi tím dělat svoje věci, implicitně z toho vyplývá paralelní běh.

Nevyplyva. Na toto tema je dobra prednaska http://blog.golang.org/concurrency-is-not-parallelism. Asynchronni volani jsou forma concurrency, k paralelismu muze dojit ale nemusi (jak uz tu nekdo zminil HW interrupt na jednom procesoru je dobry priklad). Stejne tak existuje paralelismus bez concurrency, typicke priklady jsou pipelining nebo SIMD.

Citace
Jistě se to nedá pochopit tak, že se čeká pět minut až volající dá pokoj a pak teprve se zavolá something.

Myslim, ze duvod tveho nepochopeni (krome vyse uvedeneho) je v tom, ze to co ostatni (Radek) zde oznacuji za asynchronni volani neni nutne zapsano podobne jako synchronni volani funkce(parametr), ale provadi se to prave predanim callback rutiny. Skoro kazdy jazyk umoznuje "asynchronni volani" v tomto smyslu, aniz by vyzadoval specialni syntaxi.

k

Re:JavaScript generatory
« Odpověď #26 kdy: 14. 08. 2015, 09:34:29 »
Normální člověk tohle pochopí tak, že operace something se zahájí bezprostředně ihned a volající nečeká na její dokončení a může si mezi tím dělat svoje věci, implicitně z toho vyplývá paralelní běh.
Nevyplyva.

Tímto s Vámi končím, nejste normální a nebudu s Vámi dál ztrácet čas.
Přednáška s chybou již v názvu mě nezajímá.

Celé nedorozumění v případě javascriptu jednoduše spočívá v tom, že lidé zaměňují odložené spuštění (zařazení do fronty úloh) a paralelní běh (současný běh více položek z té fronty), část z nich si pak myslí, že odložené spuštění je znakem asynchronnosti. Navíc celý systém callbacků budí dojem, že si žijí svým vlastním životem a že to celé „běží tak nějak naráz“. S vyjímkou volání ajaxu ale všechno v javascriptu běží pěkně jedno za druhým.

Ano, souhlas.

Radek Miček

Re:JavaScript generatory
« Odpověď #27 kdy: 14. 08. 2015, 09:58:07 »
Přednáška s chybou již v názvu mě nezajímá.

Paralelní != konkurentní není chyba (většina lidí se například shodne na tom, že konkurentní neimplikuje paralelní).

Makovec nereg

Re:JavaScript generatory
« Odpověď #28 kdy: 14. 08. 2015, 10:49:26 »
Celé nedorozumění v případě javascriptu jednoduše spočívá v tom, že lidé zaměňují odložené spuštění (zařazení do fronty úloh) a paralelní běh (současný běh více položek z té fronty), část z nich si pak myslí, že odložené spuštění je znakem asynchronnosti. Navíc celý systém callbacků budí dojem, že si žijí svým vlastním životem a že to celé „běží tak nějak naráz“. S vyjímkou volání ajaxu ale všechno v javascriptu běží pěkně jedno za druhým.

Zajímavé... argumentujeme zde o tom "co si někteří myslí" a nebo co asynchronní odpravdu znamená? A co je tedy odložení spuštění jiného než jedna z možných implementací asynchronicity?

Já měl za to že asynchronní znamená že prostě není synchronní (tj. že když danou část programu zavolám tak nemám jistotu že dokud nedoběhne tak se nic jiného nestane - nepočítejme pro zjednodušení vnější vstupy), a jestli je to tím že to běží po sobě v předem nedefinovaném pořadí (odloženě), nebo paralelně na tom samém stroji a nebo někde na serveru je z pohledu synchronní/nesynchronní irelevantní implementační detail (který se navíc může u jednotlivých instancí programu lišit podle toho na čem zrovna běží).

JS

Re:K čemu JavaScript generátory?
« Odpověď #29 kdy: 14. 08. 2015, 11:10:19 »
S vyjímkou volání ajaxu ale všechno v javascriptu běží pěkně jedno za druhým. Alespoň v prohlížeči - nevím jak to je v případě node.js a spol, tam je asi možné ledacos.

S tim nemohu souhlasit. Staci stranka, ktera ma dva GUI prvky navazane na Javascript - pak neni vubec jasne, ktery kod se vykona driv, protoze to zalezi na tom, kam uzivatel zrovna klikne. Takze je vysledny program asynchronni, prestoze tim uzivatelem muze byt pomala babicka, ktera vsechno provadi v podstate synchronne.

Neco jineho je CGI skript nebo tzv. inteligentni terminal - ty jsou synchronni - uzivatel zada data, stiskne ENTER a server zpracuje pozadavek (a uzivatel musi cekat, dokud se nevrati odpoved).